多态中(父类引用指向子类对象)成员函数(非静态)的特点:
(如果子类静态覆盖父类静态方法,运行时调用的还是父类中的静态方法)不常见但是要知道(与静态的加载方式有关)。
在编译时,参阅引用型变量所属的类中是否有调用的方法,如果有则编译通过,如果没有则编译失败,如代码中的方式2
因为父类中没有Method3方法,所以编译失败。
在运行时:参阅对象所属的类中是否有调用的方法。
总结:成员函数在多态中调用时,编译时期看左边(即父类(引用)中有没有调用的方法),
运行看右边(即子类对象中是否有调用的方法)。
多态中成员变量的特点:无论编译还是运行,都是参阅的引用型变量所属的类(左边)。即父类和子类中出现重名变量时,
在多态的情况下,调用的变量值是父类中的值,
- class Fu
- {
- public void Method1(){
- System.out.println("method_1");
- }
- public void Method2(){
- System.out.println("method_2");
- }
- }
- class Zi extends Fu
- {
- public void Method1(){
- System.out.println("method_1");
- }
- public void Method3(){
- System.out.println("method_3");
- }
- }
- class DuoTaiDemo5
- {
- public static void main(String[] args){
- //方式2 多态
- Fu f = new Zi();
- f.Method1();
- f.Method2();
- //f.Method3();因为父类中没有这个方法。编译失败
- //方式1
- // Zi z = new Zi();
- // z.Method1();
- // z.Method2();
- // z.Method3();
- }
- }
复制代码
|
|