2016-03-19 140 views
3

当从第二级子类使用超类构造函数时,它是否将参数传递给祖父构造函数或直接父构造函数?从grandchild类调用超类构造函数,调用父类或祖父类构造函数?

//top class 
public First(type first){ 
    varFirst = first; 
} 

//child of First 
public Second(type second){ 
    super(second); //calls First(second) 
} 

//child of Second 
public Third(type third){ 
    super(third); //calls First(third) or Second(third)? 
} 
+0

假设类型(类类型按照命名规则)是相同的对于所有3个类,varFirst也是Type的一个实例,然后**是**,可以尝试的示例示例:用** int **替换类型,并在每个构造方法System.out.println(intValue); - >构造函数第三个将传递一个值说* 2 *到第二个和第一个但是打印sysout的顺序是第一个 - 第二个 - 第三个(简而言之第三个将只调用第二个BUT第二个将调用第一个并且流程继续) –

回答

4

super调用直接父级的构造函数。因此Third中的super调用将调用Second的构造函数,而该构造函数又调用First的函数。这是很容易看到自己,如果你在构造函数中添加一些打印语句:

public class First { 
    public First(String first) { 
     System.out.println("in first"); 
    } 
} 

public class Second extends First { 
    public Second(String second) { 
     super(second); 
     System.out.println("in second"); 
    } 
} 

public class Third extends Second { 
    public Third(String third) { 
     super(third); 
     System.out.println("in third"); 
    } 

    public static void main(String[] args) { 
     new Third("yay!"); 
    } 
} 

输出你会得到:

in first 
in second 
in third 
相关问题