class SuperClass {
public String var = "I'm in SuperClass";
}
class SubClass extends SuperClass {
public String var = "I'm in SubClass";
}
public class StaticDTBDTest {
public static void main(String[] args) {
SubClass subObj = new SubClass( );
SuperClass superRef = subObj;
System.out.println(superRef.var);
}
}
我记得成员变量是在实例化对象时分配的内存空间,这里实例化了子类,为什么引用打印的是父类的成员变量值呢?
public String var = "I'm in SuperClass";
}
class SubClass extends SuperClass {
public String var = "I'm in SubClass";
}
public class StaticDTBDTest {
public static void main(String[] args) {
SubClass subObj = new SubClass( );
SuperClass superRef = subObj;
System.out.println(superRef.var);
}
}
我记得成员变量是在实例化对象时分配的内存空间,这里实例化了子类,为什么引用打印的是父类的成员变量值呢?
因为你向上转型了
System.out.println(SuperClass.var);相当于这样
多态体现应该这么写:
class SuperClass {
public String var; public SuperClass() {
var = "I'm in SuperClass";
}}class SubClass extends SuperClass {
public SubClass() {
var = "I'm in SubClass";
}
}public class TestStatic {
public static void main(String[] args) {
SubClass subObj = new SubClass();
SuperClass superRef = subObj;
System.out.println(superRef.var);
}
}
但是多态只是针对方法的,并没有说属性,superRef的类型是SuperClass,所以访问属性的时候,访问的是自身的var。因此后面一个就打印的是I 'm in SuperClass。