子类和父类之间存在多态时,我们来探讨一下编译和运行时候调用的特点:
先上代码:
- class Fu
- {
- int num = 3;
- void show()
- {
- System.out.println("fu show");
- }
- static void method()
- {
- System.out.println("fu static method");
- }
- }
- class Zi extends Fu
- {
- int num = 4;
- void show()
- {
- System.out.println("zi show");
- }
- static void method()
- {
- System.out.println("zi static method");
- }
- }
- class DuoTaiDemo
- {
- public static void main(String[] args)
- {
- //1成员变量被调用的情况。
- Fu f = new Zi();
- System.out.println(f.num); // 输出3
- //2 成员变量被调用的情况
- f.show(); // zi show
- //3 静态函数被调用的情况
- f.method(); // fu static method
- }
- }
由运行结果我们可以分析得出:
1 调用成员变量的特点:
编译时,参考引用型变量所属的类中的是否有调用的成员变量,有,编译通过,没有,编译失败。
运行时,参考引用型变量所属的类中的是否有调用的成员变量,并运行该所属类中的成员变量。
简单说,编译和运行都参考等号的左边。
2 调用成员函数的特点:
编译时,参考引用型变量所属的类中的是否有调用的成员变量,有,编译通过,没有,编译失败。
运行时,参考的是对象所属的类中是否有调用的函数。
简单说:编译看左边,运行看右边。
3 调用静态函数的特点:
编译时,参考引用型变量所属的类中的是否有调用的成员变量
运行时,参考引用型变量所属的类中的是否有调用的成员变量
简单收:编译和运行都看左边。
其实对于静态方法,是不需要对象的,直接用类名调用即可。