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("显示头像");
}
}