class S {
String s = "你猜";
public static void main(String[] args) {
S2 s2 = new S2();
s2.display();
}
}
class S1 {
int s = 1;
public void display() {
System.out.println(s);
}
}
class S2 extends S1 {
int s = 2;
}
运行结果是1 ... 是不是很汗 咋看都是2 怎么输出了1,最后百度出一句话:
当调用子类构造函数构建子类对象的时候,必然会先调用父类的构造函数,即构建一个父类对象(怎么得到这个对象?),因此父类的成员(变量和方法)也会被构建。 如果存在同名,内存中将会同时存在父类的同名成员和子类的同名成员。由于Java的多态性只针对方法来说的,成员变量不存在多态,因此成员变量只与访问的变量类型有关,而方法的调用遵从多态的规则。
|