方法重写/覆盖(override)
定义:方法覆盖(重写)就是子类有一个方法和父类的某个方法的名称、返回类型、参数一样,那么我们就说子类的这个方法覆盖了父类的方法
1.注意事项/使用细节
1.子类的方法的参数,方法名称,要和父类方法的参数,方法名称完全一样。
2.子类方法的返回类型和父类方法返回类型一样,或者是父类返回类型的子类,比如:父类返回类型是Object ,子类方法返回类型是String (String类型是Object类型的子类)。
例1:
//父类方法
public class Test01{
public Object Test(){
//父类返回类型为Object
}
public Object Test01(){
//父类返回类型为Object
}
public String Test02(){
//父类返回类型为String
}
}
//子类方法
public class Test02 extends Test01{
public Object Test(){
//返回值同为Object
}
public String Test01(){
//返回值为Object的子类,String
}
public Object Test02(){
//返回值为Object,会出现报错,因为子类中的Object是父类String的父类
}
}
例2:
public class Test01{
public AAA m1(){//父类返回类型为AAA
return null;
}
}
public class Test02 extends Test01{
public AAA m1(){
//返回值为父类AAA
}
public BBB m2(){
//返回值为父类型的子类BBB
}
public String m3(){
//报错,因为返回的类型不同,只能是父类型相关的返回值
}
}
public class AAA(){
//父类
}
public class BBB extends AAA(){
//子类BBB继承父类AAA
}
3.子类方法不能缩小父类方法的访问权限public>protected>默认>private
例:
//父类
public class Test01{
protected String hi(){
//父类的访问权限为protected
}
protected String say(){
//父类的访问权限为protected
}
protected String hello(){
//父类的访问权限为protected
}
}
public class Test02 extends Test01{
private String hi(){
//报错,因为子类的访问权限为private比父类protected小
}
public String hi(){
//正确,子类可以扩大父类的访问权限(public > private)
}
protected String hello(){
//子类的访问权限可以和父类相同
}
}