继承中方法的覆盖重写_概念与特点 与P继承中方法的覆盖重写_注意事项
成名方法重名--重写(Override)
如果子类父类中出现重名的成员方法,这时的访问是一种特殊情况,叫做方法重写 (Override)。
方法重写 :子类中出现与父类一模一样的方法时(返回值类型,方法名和参数列表都相同),会出现覆盖效
果,也称为重写或者复写。声明不变,重新实现。
代码如下
方法覆盖重写的注意事项
1.必须保证父子类之间方法的名称相同,参数列表也相同。
@Override:写在方法前面,用来检测是不是有效的正确覆盖重写。这个注解就算不写,只要满足要求,也是正确的方法覆盖重写。
2.子类方法的返回值必须【小于等于】父类方法的返回值范围。
小扩展提示:java.lang . Object类是所有类的公共最高父类(祖宗类),java.Lang.String就是object的子类。R
3.子类方法的权限必须【大于等予】父类方法的权限修饰符。小扩展提示:public > protected > ( default) > private备注:(default)不是关键字default,而是什么都不写,留空。
/* f* 在父子类的继承关系当中,创建子类对象,访问成员方法的规则: 创建的对象是谁,就优先用谁,如果没有则向上找。 注意事项; 无论是成员方法还是成员变量,如果没有都是向上找父类,绝对不会向下找子类的。 重写( Override) 概念::在继承关系当中,方法的名称一样,参数列表也—样。 重写(Override)。方法的名称一样,参数列表【也一样】。
覆盖、覆写。重载(OverLoad):方法的名称一样,参数列表【不一样】。 方法的覆盖重写特点:创建的是子类对象,则优先用子类方法 */ public class demo01 { public static void main(String[] args) { Zi zi = new Zi(); zi.methoZi(); zi.methodFu(); zi.method(); } }
重写的应用
子类可以根据需要,定义特定于自己的行为。既沿袭了父类的功能名称,又根据子类的需要重新实现父类方法,从
而进行扩展增强。比如新的手机增加来电显示头像的功能,代码如下:
class Phone { public void sendMessage(){ System.out.println("发短信"); } public void call(){ System.out.println("打电话"); } public void showNum(){ System.out.println("来电显示号码"); } }
//智能手机类 class NewPhone extends Phone { //重写父类的来电显示号码功能,并增加自己的显示姓名和图片功能 public void showNum(){ //调用父类已经存在的功能使用super super.showNum(); //增加自己特有显示姓名和图片功能 System.out.println("显示来电姓名"); System.out.println("显示头像"); } } public class ExtendsDemo06 { public static void main(String[] args) { // 创建子类对象 NewPhone np = new NewPhone(); // 调用父类继承而来的方法 np.call(); // 调用子类重写的方法 np.showNum(); } }
小贴士:这里重写时,用到super.父类成员方法,表示调用父类的成员方法。
注意事项
1. 子类方法覆盖父类方法,必须要保证权限大于等于父类权限。
2. 子类方法覆盖父类方法,返回值类型、函数名和参数列表都要一模一样。
/* f* 在父子类的继承关系当中,创建子类对象,访问成员方法的规则: 创建的对象是谁,就优先用谁,如果没有则向上找。 注意事项; 无论是成员方法还是成员变量,如果没有都是向上找父类,绝对不会向下找子类的。 重写( Override) 概念::在继承关系当中,方法的名称一样,参数列表也—样。 重写(Override)。方法的名称一样,参数列表【也一样】。覆盖、覆写。重载(OverLoad):方法的名称一样,参数列表【不一样】。 方法的覆盖重写特点:创建的是子类对象,则优先用子类方法 */ public class demo01 { public static void main(String[] args) { Zi zi = new Zi(); zi.methoZi(); zi.methodFu(); zi.method(); } }