标题:[转载]网上找的一个98%的人都会出错的问题!!
只看楼主
betty
Rank: 1
等 级:新手上路
帖 子:61
专家分:0
注 册:2006-9-21
 问题点数:0 回复次数:3 
[转载]网上找的一个98%的人都会出错的问题!!

public class Parent
{
public void test()
{
}

public Parent()
{
test();
}

public static void main(String[] args)
{
new Child();
}
}

class Child extends Parent
{
private int instanceValue = 20;
public void test()
{
System.out.println("instance value is: " + instanceValue);
}
}
各位先猜猜打印的结果是多少呢?为什么呢?

搜索更多相关主题的帖子: 都会 
2006-11-11 13:46
mercyblitz
Rank: 1
等 级:新手上路
帖 子:49
专家分:0
注 册:2006-5-20
得分:0 

打印結果等于0;
在main方法中new Child()首先构造父类的构造函数,因为父类中构造有调用test()方法,而子类中覆盖了test()方法,实际调用的是子类中的方法(因为是子类中的实例),但是父类中没有instanceValue,所以默认会使instanceValue=0;(Java虚拟机的规定),结果就不言而喻了!
一般的规律:
在多态中,子类中的实例调用方法时师子类中声明的方法,而变量这是调用父类中的!

2006-11-11 14:39
betty
Rank: 1
等 级:新手上路
帖 子:61
专家分:0
注 册:2006-9-21
得分:0 
是不是编译class Child时先编译int instanceValue,默认为0,再编译test()方法,执行时先执行test(),再给instanceValue赋值为20

2006-11-11 15:53
mercyblitz
Rank: 1
等 级:新手上路
帖 子:49
专家分:0
注 册:2006-5-20
得分:0 

嗯,差不多!

2006-11-11 16:23



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-102227-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.424303 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved