黑马程序员技术交流社区
标题:
这个运行的答案为什么是这个??谁能解释下答案???
[打印本页]
作者:
马伟奇
时间:
2013-5-6 09:48
标题:
这个运行的答案为什么是这个??谁能解释下答案???
本帖最后由 马伟奇 于 2013-5-6 10:04 编辑
class Father {
int m =6;
public Father() {
this.show();
}
void show() {
System.out.println("父");
}
}
class Child1 extends Father {
int m =10;
void show() {
System.out.println(m);
}
}
class Child2 extends Father {
void show() {
System.out.println(m);
}
}
class Test1 {
public static void main(String args[]) {
Father n = new Child1();
Father n1 = new Child2();
}
}
复制代码
作者:
askyle
时间:
2013-5-6 10:01
你运行一下就会有结果
作者:
马伟奇
时间:
2013-5-6 10:03
askyle 发表于 2013-5-6 10:01
你运行一下就会有结果
我运行了,我知道结果,我想要的是结果的解释
作者:
殇_心。
时间:
2013-5-6 10:11
你代码看得我晕了。
结果是: 0 6
原因是:
Father n = new Child1(); //多态。父类引用子类对象。父类构造函数中this.show(),此时this指向Child1.
// 也就是说调用子类的show。问题出来了。为什么输出是0呢。
// 子类show又输出m,m是子类的成员变量,父类不知道m的值。
//所以jvm就会给m初始化。也就是0。所以就输出0咯。
Father n1 = new Child2();//输出6。这里的6是继承自父类的m。这个理解不难。
作者:
殇_心。
时间:
2013-5-6 10:19
建议楼主把代码格式搞好。
我都把那啥类都看成内部类了。
内牛满面啊!!!!
作者:
曹德君
时间:
2013-5-6 11:23
稍微改了一下,这样更好理解点。
class Father
{
int m 6;
int x =99;
public Father()
{
this.show();
}
void show()
{
System.out.println("父");
}
}
class Child1 extends Father
{
int m =10;
int num;
void show()
{
System.out.println(x);//使用的是父类的成员变量的值。
System.out.println(num);//当子类的成员变量值没有初始化,jvm会自动将其初始化为0
System.out.println(m);//子类show输出m,m是子类的成员变量,父类不知道m的值。于是初始化m。
}
}
class Child2 extends Father
{
void show()
{
System.out.println(m);
}
}
class Test1
{
public static void main(String args[])
{
Father n = new Child1();
Father n1 = new Child2();
}
}
复制代码
作者:
黄玉昆
时间:
2013-5-6 23:01
如果问题未解决,请继续追问,如果问题解决了,请将分类改为“已解决”,谢谢
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2