一:基本介绍
简单的说:方法覆盖(重写)就是子类有一个方法,和父类的某个方法的名称、返回类型、参数一样,那么我们就说子类的这个方法覆盖了父类的方法
二:需要满足的条件
- 子类的方法的形参列表,方法名称,要和父类方法的形参列表,方法名称完全一样。
子类方法的返回类型和父类方法返回类型一样,或者是父类返回类型的子类比如交类返回类型是Object ,子类方法返向类型是String ```java class Person{ public void eat(){
} } class man extends Person{ @Override public void eat() {
System.out.println();
} }
3. **_子类方法不能缩小父类方法的访问权限【演示】public > protected >默认>private (只能扩大权限)_**
```java
class Person{
void eat(){
}
}
class man extends Person{
@Override
public void eat() {
System.out.println();
}
}
三:比较
四:练习
:::danger
(1)编写一个 Person 类,包括属性/private(name、age),构造器、方法 say(返回自我介绍的字符串)。
(2) 编写一个 Student 类,继承 Person 类,增加 id、score 属性/private,以及构造器,定义 say 方法(返回自我介绍的信息)。
(3)在main 中,分别创建 Person 和 Student 对象,调用 say 方法输出自我介绍
:::
public class testOveride {
public static void main(String[] args) {
Person sakura = new Person("sakura", 18);
Student sakura12 = new Student("sakura12", 19, 1001, 100);
System.out.println(sakura.say());
System.out.println(sakura12.say());
}
}
class Person {
private String name ;
private int age;
public Person(String name, int age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String say(){
return "name:"+ this.name + " age:" + this.age;
}
}
class Student extends Person{
private int id;
private int score;
public Student(String name, int age, int id, int score) {
super(name, age);
this.id = id;
this.score = score;
}
@Override
public String say() {
return super.say() + "id:" + id + " score:" + score ;
}
}