猿问

java构造方法顺序问题?

下面是People和Child类的定义和构造方法,每个构造方法都输出编号。在执行new Child("mike")的时候都有哪些构造方法被顺序调用?请选择输出结果 ( D ) 
class People { 
String name; 
public People() { System.out.print(1); } 
public People(String name) { 
System.out.print(2); 
this.name = name; } 

class Child extends People { 
People father; 
public Child(String name) { 
System.out.print(3); 
this.name = name; 
father = new People(name + ":F"); } 
public Child(){ System.out.print(4); } 

A)312 B) 32 C) 432 D) 132 

神不在的星期二
浏览 660回答 4
4回答

弑天下

java中的构造方法调用顺序问题,举例如下:public class Son extends Father {SonProp r = new SonProp();public Son() {System.out.println("Son is construct");}public static void main(String[] args) {new Son();}}class Father {FatherProp SonProp = new FatherProp();public Father() {System.out.println("Father is construct");}}class SonProp {public SonProp() {System.out.println("SonProp is construct");}}class FatherProp {public FatherProp() {System.out.println("FatherProp is construct");}}执行结果如下:FatherProp is constructFather is constructSonProp is constructSon is construct由此看出java类初始化时构造函数调用顺序:(1)初始化对象的存储空间为零或null值;(2)按顺序分别调用父类成员变量和实例成员变量的初始化表达式;(3)调用父类构造函数;(如果实用super()方法指定具体的某个父类构造函数则使用指定的那个父类构造函数)(4)按顺序分别调用类成员变量和实例成员变量的初始化表达式;(5)调用类本身构造函数。

翻阅古今

子类实例化的时候会先调用父类的构造函数,然后才调用子类的构造函数。所以一般在子类的构造函数中第一条语句就是调用父类构造函数,不过如果你没有在第一条语句显示地调用父类构造函数,那名JAVA会 自动先调用父类的默认无参构造函数,当然这种情况下,你得保证父类必须有无参构造函数。所以new Child("mike")时会先调用父类无参的构造函数,public People() { System.out.print(1); }然后执行子类自己的构造函数里的内容,得到结果是 1 3 2...
随时随地看视频慕课网APP

相关分类

JQuery
我要回答