1:成员变量->编译时:参考引用型变量所属的类中的是否有调用的成员变量,有,编译通过,没有,编译失败。
运行时:产考引用型变量所属的类中是否有调用的成员变量,并运行该所属类中的成员变量。
(简单说:编译和运行时参考等号的左边) (如:Fu f = new Zi(); 看 Fu 中的 成员变 )
2:成员函数—>编译时:参考引用型变量所属的类中是否有调用的方法,有,编译通过,没有,编译失败。
运行时:参考的是对象所属的类中是否有调用的函数,有,编译通过,没有,编译失败。
(简单说:编译时看左边,运行时看右边)
3:静态函数—>编译时:参考引用变量所属的类中是否有调用的静态方法,有,编译通过,没有,编译失败。
运行时:参考引用变量所属的类中是否有调用的静态方法,有,编译通过,没有,编译失败。
(简单说:编译和运行看左边) 【其实 静态方法 直接用类名调用即可】
注释: 由于成员方法存在方法重写,所以它运行看右边。
多态的弊端;不能使用子类的功能。
1 import java.util.ArrayList; 2 import java.util.Iterator; 3 import java.util.List; 4 5 public class test { 6 7 public static void main(String[] args) { 8 // TODO Auto-generated method stub 9 A a = new B();10 a.dosomething();// wo shi A11 a.b();// hi:B12 System.out.println(a.aa);// 813 14 }15 16 }17 18 class A {19 int aa = 8;20 21 public A() {22 System.out.println("A");23 }24 25 public static void dosomething() {26 System.out.println("wo shi A");27 }28 29 public void b() {30 System.out.println("hi:A");31 }32 33 }34 35 class B extends A {36 int aa = 10;37 38 public B() {39 System.out.println("B");40 }41 42 public static void dosomething() {43 System.out.println("wo shi B");44 }45 46 public void b() {47 System.out.println("hi:B");48 }49 50 }
结果为:
A
Bwo shi A // 这个事测试静态方法的hi:B8