public class Avf { public static void main(String[] args) { A a = new B(); System.out.println(a.str); a.get(); } } class A{ String str = "abc"; public void get(){ System.out.println("A"); } } class B extends A{ String str = "def"; public void get(){ System.out.println("B"); } }
代码中我们让B继承了A,并且B中和A中一样有相同变量str和get方法
然后我们执行:
A a = new B();
System.out.println(a.str);
a.get();
最终输出:
abc
B
可以看出,我们用一个A类型的变量指向B类型的实例时,如果调用变量,则会根据变量的类型来决定是调用父类还是子类里的变量,而子类同名方法会覆盖父类同名方法,所以输出的是B。