4.1.6.1.
重写原理
当⼦类希望实现⽗类⽅法功能之外的⼀些功能时
,
如何处理
?
分析
:
解决
:
⼦类可以继承到⽗类中的属性和⽅法, 但是有些⽅法, ⼦类的实现与⽗类的⽅法可
能实现的不同。 当⽗类提供的⽅法已经不能满⾜⼦类的需求时, ⼦类中可以定义与
⽗类相同的⽅法。
当出现同名⽅法后
,
⽅法如何调⽤
?
这时⼦类⽅法完成对⽗类⽅法的覆盖, ⼜叫重写(
Override
)。
class Phone extends Object{
String color;
int model;
public void callPhone(){
System.out.println("打电话");
}
public void show(){
return null;
}
}
class Iphone extends Phone{
String gui;
public void fangShui(){
System.out.println("防⽔");
}
@Override
public void callPhone(){
//公共的功能
//System.out.println("打电话");
//通过super调⽤⽗类的callPhone⽅法
super.callPhone();
//⾃⼰的功能
System.out.println("⾃⼰的功能");
}
//⽗类返回值是Phone,⼦类的show返回值是Iphone,重写时,程序允许返回值不
同
//重写的注意点:⽗类和⼦类的重写⽅法返回值可以不同,但是⽅法名,参数必须相
同.返回值不同时,
//必须保证⽗⼦类的重写⽅法的返回值有继承关系,并且⼦类中的返回值的类型是
⽗类的返回值类型或者⼦类类型
//在同⼀个类中不允许出现⽅法名,参数都相同,但是返回值不同的情况.
public Iphone show(){
return null;
}
}
1.1. @Override
⼀个注解, 进⾏重写前的校验。 校验这个⽅法是否是⼀个重写的⽅法。 如果不是重
写的⽅法, 会直接报错。
1.2.
重写的注意事项
⽅法名字必须和⽗类⽅法名字相同
参数列表必须和⽗类⼀致
⼦类⽅法的访问权限需要⼤于等于⽗类⽅法的访问权限
,
⽗类不能是
private
⼦类⽅法的返回值类型需要⼩于等于⽗类⽅法的返回值类型
--
这⾥说的是引⽤类