方法覆盖(重写)
- 简单的说:方法覆盖(重写)就是子类有一个方法,和父类的某个方法的名称、返回类型、参数一样 , 哪我们就说子类的这个方法覆盖了父类的方法.(返回类型和父类的方法一样并不准确,应该是子类方法的返回类型应该和父类的方法一样或者是父类返回类型的子类)
- 接下来通过代码了解一下方法覆盖(重写):
//这里是父类Animal
public class Animal {
public void cry() {
System.out.println("动物的叫声");
}
public Object m1() {//父类中m1方法的返回类型是Object
return null;
}
public String m2() {//父类中m2方法的返回类型是String
return null;
}
protected void eat() {//父类中eat方法的访问权限是Protected
System.out.println("动物进食");
}
}
//这是子类Dog
public class Dog extends Animal {
/*
1.因为Dog继承了Animal Dog是Animal的子类
2.而Dog中的cry()方法 和 Animal类中的cry()方法定义形式(名称,返回类型,参数)一致
3.这时候我们就可以说Dog中的cry()方法重写了Animal的cry方法
*/
public void cry(){
System.out.println("小狗汪汪叫");
}
//m1方法的返回类型是String 与父类中的m1方法比较
//父类中m1方法是Object类型 , String属于Object的子类
//所以子类方法的返回类型和父类一致(属于父类方法的返回类型的子类)
public String m1(){
return null;
}
//如果定义m2方法的返回类型是Object会报编译错误
//报错截取:attempting to use incompatible return type
/*
原因:
子类方法的返回类型应该和父类的方法一样或者是父类返回类型的子类
而Object并不是String的子类 而是String的父类
*/
public Object m2(){//这里是错误的 返回类型不可以是Object
return null;
}
//报错截取:attempting to assign weaker access privileges ('private'); was 'protected'
//这里报的错是Dog类中的eat()方法试图缩小父类方法的访问权限 , 这是错误的
//子类方法不能缩小父类方法的访问权限
public void eat(){
}
}