子类通过重写父类的方法,可以用自身的行为替换父类的行为。
方法的重写是实现多态的必要条件。(方法的重载叫做overload)
方法的重写需要满足下面的三个要求:
1.“==”: 方法名、形参列表相同。
2.“≤”:返回值类型和声明异常类型,子类小于等于父类。
3.“≥”: 访问权限,子类大于等于父类。
public class TestOverride {
public static void main(String[] args) {
Vehicle v1 = new Vehicle();
Vehicle v2 = new Horse();//注意,父类的引用可以指向子类的对象
Vehicle v3 = new Plane();//注意,父类的引用可以指向子类的对象
v1.run();
v2.run();//注意这里调用的是子类的实现
v3.run();
v2.stop();
v3.stop();
}
}
class Vehicle { // 交通工具类
public void run() {
System.out.println("跑");
}
public void stop() {
System.out.println("停");
}
public Person fun(){//这里假设Person是我们定义的一个类,并假设Student是他的子类
return new Person();
}
}
class Horse extends Vehicle {
public void run() { // 重写父类方法,这个run方法就覆盖了父类的run方法,override也有覆盖的意思
System.out.println("蹄");
}
/*public Object fun(){
return new Object();
}这么写会报错*/
public Student fun(){
return new Student();
}//这么写就不会报错。因为满足返回值类型小于等于父类的类型
}
class Plane extends Vehicle {
public void run() { // 重写父类方法
System.out.println("飞");
}
public void stop() {//重写父类方法
System.out.println("空中停");
}
}