总结:在编译时期:参阅引用型变量所属的类中是否有调用的方法。如果有编译通过,没有则编译失败
在运行时期:参阅对象所属的类中是否有调用的方法。
一句话就是:成员函数在多态调用时,编译看左边运行看右边。
两种特殊情况除外
1.多态中成员变量无论编译还是运行都参考左边(引用型变量所属的类)
2.在多态中,静态成员函数无论编译和运行都看左边(引用型变量所属的类)
- class Fu
- {
- int num = 2;
- void method1(){
- System.out.println("Fu_method1");
- }
- void method2(){
- System.out.println("Fu_method2");
- }
- static void method4(){
- System.out.println("Fu_method4");
- }
- }
- class Zi extends Fu
- {
- int num = 3;
- void method1(){
- System.out.println("Zi_method1");
- }
- void method3(){
- System.out.println("Zi_method3");
- }
- static void method4(){
- System.out.println("Zi_method4");
- }
- }
- class Demo04
- {
- public static void main(String[] args)
- {
- /*(动态绑定)
- 下边编译失败,因为父类中没有method3方法。
- 总结:在编译时期:参阅引用型变量所属的类中是否有调用的方法。如果有编译通过,没有则编译失败
- 在运行时期:参阅对象所属的类中是否有调用的方法。
- 一句话就是:成员函数在多态调用时,编译看左边运行看右边
- */
- Fu f = new Zi();
- f.method1();
- f.method2();
- //f.method3();//编译失败,因为父类中没有method3方法
-
- //下边是2种特殊情况
- //1.多态中成员变量无论编译还是运行都参考左边(引用型变量所属的类)
- Fu fu = new Zi();
- Zi zi = new Zi();
- System.out.println(fu.num);//打印 2
- System.out.println(zi.num);//打印 3
- //2.在多态中,静态成员函数无论编译和运行都看左边(引用型变量所属的类)
- Fu fu_1 = new Zi();
- Zi zi_2 = new Zi();
- fu_1.method4();//打印 Fu_method4
- zi_2.method4();//打印 Zi_method4
- }
- }
复制代码 |
|