一道Java的问题,为何输出时会调用构造函数

有两个Java类publicclassFather{publicFather(){System.out.println("Father");}}publicclassSo... 有两个Java类
public class Father {
public Father(){
System.out.println("Father");
}
}
public class Son extends Father{
private Son son;

public Son(){
System.out.println("Son Constructor");
}
@Test
public void print(){
System.out.println(son);
}
}
这样通过单元测试print方法时输出了
Father
Son Constructor
null
单单输出son为什么会调用构造函数呢,是通过什么方法调用的呢
展开
 我来答
shoushou2001
2013-07-24 · TA获得超过273个赞
知道答主
回答量:221
采纳率:100%
帮助的人:129万
展开全部
Son son这句话意思是声明一个son,但Son是Father的子类,即Father是Son的父类。要声明子类,必须要有父类,意思跟先有你父亲再有你差不多了^_^,所以在声明son的时候,要先调用Father的构造函数,默认构造一个Father出来,然后再调用Son的构造函数,Father的构造函数是通过Son()调用的,所以就输出那样的结果了。Son()可以看成是这样:
public Son(){
super();//此处调用父类的构造函数,此处super()可以不写,你可以去了解一下super的作用
System.out.println("Son Constructor");
}
追问
声明的时候会调用构造函数吗,那为什么还需要new Son()来创建对象呢
追答
改正:是创建实例的时候调用构造函数,即new Son();
我是李大风
2013-07-24
知道答主
回答量:13
采纳率:0%
帮助的人:15.3万
展开全部
因为需要首先对这个类进行初始化啊,以下是类的初始化顺序
(1)加载父类(以下序号相同,表明初始化是按代码从上到下的顺序来的)
1.为父类的静态属性分配空间并赋于初值
1.执行父类静态初始化块;

(2)加载子类
2.为子类的静态属性分配空间并赋于初值
2.执行子类的静态的内容;

(3)加载父类构造器
3.初始化父类的非静态属性并赋于初值
3.执行父类的非静态代码块;
4.执行父类的构造方法;

(4)加载子类构造器5.初始化子类的非静态属性并赋于初值
5.执行子类的非静态代码块;
6.执行子类的构造方法.
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
hulibabaii
2013-07-24 · 超过46用户采纳过TA的回答
知道小有建树答主
回答量:123
采纳率:0%
帮助的人:61.9万
展开全部
你在做单元测试,所以先回创建一个SON对象,默认会调用父类的构造。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
zxl371119482
2013-07-24
知道答主
回答量:9
采纳率:0%
帮助的人:8.3万
展开全部
上述加了Test的print方法可解释为:
public class Test {
public static void main ( String args[]) {
Son son = new Son();
System.out.println(son.getSon());
}

getSon()方法为 private Son son;对应的get方法
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2013-07-24
展开全部
当新创建一个对象的时候,会调用类的构造函数。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(4)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式