关于重写
基本定义:子类重新改写父类的方法即重写。
重写的原因:为了更加准确地描述子类的行为特征。
重写的注意事项:
1)重写后的方法访问权限(public protected 默认 private)需与父类相同或大于父类
2)父类中final、static修饰的方法,不允许被重写,但可以被继承
3)子类重写的方法,不允许static修饰
4)重写方法可以使用@Override注解
5)重写后的子类方法名必须与父类一致,参数列表除名字外其他必须一致
6)如果父类返回值类型为void或基本数据类型,则重写后的方法必须和父类保持一致
7)如果父类返回值类型为引用类型,则重写后的方法返回值要么与父类一致,要么是父类的子类
代码示例
//父类
public class Mammal {
public void move() {
System.out.println("正在移动......");
}
}
//子类
public class Bat extends Mammal{
@Override
public void move() {
System.out.println("靠翼飞行......");
}
}
重写后的方法访问权限此时与父类相同,亦可大于父类。子类使用了@Override注解重写方法。重写后的方法与父类方法名均为move,返回值类型同为void。
public class Mammal {
public final void move() {
System.out.println("正在移动......");
}
}
//子类
public class Bat extends Mammal{
@Override//此时必然报错,final修饰的父类方法不允许被重写
public void move() {
System.out.println("靠翼飞行......");
}
使用final或static修饰的父类方法不允许被重写故必然报错,但仍然可以被继承。
//父类
public class Mammal {
public String move() {
System.out.println("正在移动......");
return " ";
}
}
//子类
public class Bat extends Mammal{
@Override
public String move() {
System.out.println("靠翼飞行......");
return " ";
}
父类返回值类型为引用类型,则子类返回值此时与父类一致,或者是父类的子类。