一道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为什么会调用构造函数呢,是通过什么方法调用的呢 展开
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为什么会调用构造函数呢,是通过什么方法调用的呢 展开
6个回答
展开全部
Son son这句话意思是声明一个son,但Son是Father的子类,即Father是Son的父类。要声明子类,必须要有父类,意思跟先有你父亲再有你差不多了^_^,所以在声明son的时候,要先调用Father的构造函数,默认构造一个Father出来,然后再调用Son的构造函数,Father的构造函数是通过Son()调用的,所以就输出那样的结果了。Son()可以看成是这样:
public Son(){
super();//此处调用父类的构造函数,此处super()可以不写,你可以去了解一下super的作用
System.out.println("Son Constructor");
}
public Son(){
super();//此处调用父类的构造函数,此处super()可以不写,你可以去了解一下super的作用
System.out.println("Son Constructor");
}
追问
声明的时候会调用构造函数吗,那为什么还需要new Son()来创建对象呢
追答
改正:是创建实例的时候调用构造函数,即new Son();
展开全部
因为需要首先对这个类进行初始化啊,以下是类的初始化顺序
(1)加载父类(以下序号相同,表明初始化是按代码从上到下的顺序来的)
1.为父类的静态属性分配空间并赋于初值
1.执行父类静态初始化块;
(2)加载子类
2.为子类的静态属性分配空间并赋于初值
2.执行子类的静态的内容;
(3)加载父类构造器
3.初始化父类的非静态属性并赋于初值
3.执行父类的非静态代码块;
4.执行父类的构造方法;
(4)加载子类构造器5.初始化子类的非静态属性并赋于初值
5.执行子类的非静态代码块;
6.执行子类的构造方法.
(1)加载父类(以下序号相同,表明初始化是按代码从上到下的顺序来的)
1.为父类的静态属性分配空间并赋于初值
1.执行父类静态初始化块;
(2)加载子类
2.为子类的静态属性分配空间并赋于初值
2.执行子类的静态的内容;
(3)加载父类构造器
3.初始化父类的非静态属性并赋于初值
3.执行父类的非静态代码块;
4.执行父类的构造方法;
(4)加载子类构造器5.初始化子类的非静态属性并赋于初值
5.执行子类的非静态代码块;
6.执行子类的构造方法.
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
你在做单元测试,所以先回创建一个SON对象,默认会调用父类的构造。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
上述加了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方法
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
展开全部
当新创建一个对象的时候,会调用类的构造函数。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询