Java中每一步操作,操作数据的类型必须合法。父类有的方法子类都有,凡是能够使用父类生成对象的地方,都可以使用子类生成对象。
举一个例子:
package java6;
public class java6 {
public static void main(String args[]){
Car aCar = new Trash_Car();
aCar.Push_break();
}
}
class Car{
int Car_color;
int Car_door;
int speed;
public void Push_break(){
speed = 0;
System.out.println("Inside Car's push_break() method.");
}
}
class Trash_Car extends Car{
double amount;
public void Push_break(){
speed = speed - 10;
System.out.println("Inside Trash_Car's push_break() method.");
}
}
运行结果如下:
也就是说Trash_Car类中的push_break()方法被调用,得到的启示是,已经编译好的类库可以调用新定义的子类的方法,而不必重新编译。例如,如果增加几个Car的子类定义,则aCar.push_break()可以分别调用不同的push_break()方法,只需要分别用new生成不同子类的实例就可以了。体现了面向对象的代码的可重用性和鲁棒性。
根据上面的例子,可以得到运行时多态有以下两条规则:
(1)对子类的一个实例,如果子类重写(覆盖)了父类的方法,则运行时系统调用子类的方法。
(2)如果子类继承了父类的方法,则运行时系统调用父类的方法。