class Father
{
int age = 20;
Father()
{
say();
System.out.println(age);
}
void say()
{
System.out.println(age);
}
}
class Child extends Father
{
int age = 40;
Child(){
say();}
void say()
{
System.out.println(age);
}
public static void main(String[] args)
{
new Child();
}
}
{
int age = 20;
Father()
{
say();
System.out.println(age);
}
void say()
{
System.out.println(age);
}
}
class Child extends Father
{
int age = 40;
Child(){
say();}
void say()
{
System.out.println(age);
}
public static void main(String[] args)
{
new Child();
}
}
解决方案 »
- (补充和更正)Java读取TXT文档中的数据并赋值给动态数组
- 用Java实现字符数组的所有组合?
- 加载连接数据库的驱动程序4种格式具体什么样啊?
- 请大家谈谈你们对JAVA编码问题的解决方法
- 我写了一个java程序,但希望他在早上5:00启动,晚上12:00关闭,如何自动实现?
- 文本替换的问题,把一个文件中的一段替换为指定的字符串,该如何操作?
- 关于 instanceof 的疑问,巨难
- abc
- 兄弟我要用java做个网站监控系统,不知如何下手,请高手给点意见!!!!
- 急急急急:向高手征求用JAVA实现 多叉树的算法!!!
- Java Consultant- Staff Software Engineering上海职位
- swing jtable 问题
一样的帖
0
20
40
考的是父类和子类初始化顺序的问题。基类参数->基类构造器->子类参数->子类构造器(未考虑静态字段以及静态块,实际是一样的)。
Child子类构造函数中首先调用父类Father 的构造函数,遇见了say()方法,这个方法是缺省的方法故而可以看成类接口的一部分可以动态转型,从而调用Child的方法。然后这个时候Child的age没有初始化(基类还没有构造完全),故而打印0,后面当然打印自身的age为20,然后最后调用Child的打印age为40.
我在另外一个帖子已经回了
class Father
{
int age = 20; //4,初始化age
Father() //3,初始化Child的基类
{
say(); //5,调用Child的say()
System.out.println(age); //7,输出20
}
void say()
{
System.out.println(age);
}
}
class Child extends Father
{
int age = 40; //8,初始化Child中的age
Child() //2,构造Child对象
{
say();//9,调用Child的say()
}
void say()
{
System.out.println(age); //6,第一次age=0,输出0//10,第二次age=40,输出40
}
public static void main(String[] args)
{
new Child(); //1,主程序入口
}
}
http://blog.csdn.net/KingWolfOfSky/archive/2009/08/13/4444231.aspx
你看看《Thinking is Java》继承那一章的几个例子,可以帮助你理解。