方法重写也叫方法覆盖,需要满足以下条件:
- 子类方法的方法形参列表、方法名称要和父类方法的参数、方法的名称完全一样。
- 子类方法的返回类型和父类方法的返回类型一样,或者是父类返回类型的子类,比如父类返回类型时Object,子类返回类型是String
- 子类方法不能缩小父类方法的访问权限(可以扩大权限)。(public > protect > 默认 > private)
package override_TY;
public class Animal {
public void cry() {
System.out.println("动物叫唤..");
}
public Object m1() {
return null;
}
public String m2() {
return null;
}
public AAA m3() {
return null;
}
protected void eat() {
}
}
package override_TY;
public class Dog extends Animal{
//1. 因为Dog 是 Animal子类
//2. Dog的 cry方法和 Animal的 cry定义形式一样(名称、返回类型、参数)
//3. 这时我们就说 Dog的cry方法,重写了Animal的cry方法
@Override
public void cry() {
System.out.println("小狗汪汪叫..");
}
//细节: 子类方法的返回类型和父类方法返回类型一样,
// 或者是父类返回类型的子类比如 父类 返回类型是 Object ,
// 子类方法返回类型是String
@Override
public String m1() {
return null;
}
// 这里Object 不是 String的子类,因此编译错误
// public Object m2() {
// return null;
// }
@Override
public AAA m3() {
return null;
}
// @Override
// public BBB m3() {
// return null;
// }
//细节: 子类方法不能缩小父类方法的访问权限(可以扩大权限)
// public > protected > 默认>private
@Override
public void eat() {//或者protected void eat(){}
}
//错误写法
// @Override
// void eat() {}
// @Override
// private void eat() {}
}
class AAA {
}
class BBB extends AAA {
}
package override_TY;
public class Override01 {
public static void main(String[] args) {
//演示方法重写的情况
Dog dog = new Dog();
dog.cry();//ctrl+b查找定位方法
}
}