> 文章列表 > 2.0、Java继承与多态 - 方法重写与重载

2.0、Java继承与多态 - 方法重写与重载

2.0、Java继承与多态 - 方法重写与重载

2.0、Java继承与多态 - 方法重写与重载

重写(Override):方法名一样,参数列表也一样 重写也叫做覆写或者覆盖 ]

重载(Overload):方法名一样,但是参数列表不一样;

子类将父类的方法重写之后:如果创建的是子类对象,则子类对象优先使用子类重写后的方法;

重写方法时应该注意以下几点 ->

        1、方法重写后,与父类方法的 方法名 和 参数列表 都需要保持一致;重写方法时我们可以将 @Override 注解放到方法的前面,他可以自动的检测我们重写的方法是否合法;[ 当然这个如果不写这个注解,如果我们的语法正确,也是能够正常重写父类的方法的 ]

        2、子类在重写父类方法时,该方法的返回值范围,必须要小于等于父类的返回值范围;比如 -> 父类中的方法 public Object method(){} 返回值是 Object 类 ,那么 子类重写这个 method() 方法的时候他的返回值就只能是 Object 类或者 Object 的子类才可以;

        3、子类 方法的修饰权限必须要 大于等于 父类方法的修饰权限例如 :父类的方法修饰权限是 - protected 那么 子类重写该方法后 权限修饰符 只能是 protected 或者 public 而不能是 ( default ) 或者 private; 

知识扩展【修饰符权限】:public  >  protected  >  ( default )  >  private ;

注释:( default ) 不是关键字,而是指如果什么都不写,默认就是 ( default ) 权限修饰;

不过我们在大多数的情况下:重写方法之后,该方法的权限和返回值类型基本都是和父类的方法保持一致的;[ 但是也应该了解重写的正确语法 ]

那么在实际开发中,什么情况下会使用到 重写Override 呢?

下面给大家举个例子 ->

上代码理解 ->

OldPhone.java 文件如下 ->

public class OldPhone {public void call() {System.out.println("打电话");}public void send() {System.out.println("发短信");}public void show() {System.out.println("显示号码");}}

NewPhone.java 文件如下所示 ->        

public class NewPhone extends OldPhone {public void show() {super.show();System.out.println("显示姓名");System.out.println("显示头像");}}