黑马程序员技术交流社区
标题:
成员变量不存在多态?
[打印本页]
作者:
xiaodaodan
时间:
2015-5-15 15:16
标题:
成员变量不存在多态?
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的多态性只针对方法来说的,成员变量不存在多态,因此成员变量只与访问的变量类型有关,而方法的调用遵从多态的规则。
作者:
pvbj0314
时间:
2015-5-15 17:24
子类构造函数会隐含地使用super()调用父类构造函数。使用下面的代码打印结果是2.
public 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 {
S2(){ s = 2;}
}
作者:
xiaodaodan
时间:
2015-5-15 22:36
pvbj0314 发表于 2015-5-15 17:24
子类构造函数会隐含地使用super()调用父类构造函数。使用下面的代码打印结果是2.
public class S {
...
你这个 是直接写了个构造函数,当然输出是2了,好好看看我的源代码,有其中的深意的
作者:
xiaodaodan
时间:
2015-5-28 20:14
这么深一帖子,没人跟?太伤心了,这么好的帖子...
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2