多态就是父类引用指向子类对象。既然是子类对象,那么对象中就必然既包含子类自己的数据,又继承了父类的数据,因此会有父子两类的数据。
但在代码中,如果用父类引用去调用子类中特有的方法,在编译时会找不到该方法,编译无法通过。因为在编译时,编译器只知道该引用是父类的引用,只有父类中的方法可以被调用。如果子类中覆盖了父类中的方法,在方法调用时,编译可以通过,因为父类中有同名的方法。而运行时是运行子类中的方法代码的。
总结如下:
多态调用方法,编译时看引用的左边父类类型,运行时看右边子类的方法。
多态调用变量时,编译和运行都是看左边类型。 |
|