java - 基于 SCJP 程序的怀疑(EXAM 310-065)

标签 java constructor scjp

class Building{
    Building(){
        System.out.print("b ");
    }
    Building(String name){
        this();
        System.out.print("bn "+name);
    }
}
public class House extends Building{
    House(){
        System.out.print("h ");
    }
    House(String name){
        this();
        System.out.print("hn "+name);
    }
    public static void main(String[] args){
        new House("x ");
    }
}

我认为输出必须是 b bn h hn x .但是输出是 b h hn x .

我很困惑。这个输出是怎么来的。帮我

最佳答案

您可能正在考虑对 super() 的隐式调用Java 插入到构造函数中。但请记住,Java 仅在需要时才这样做——也就是说,当您自己不调用另一个构造函数时。当您调用 this()单论House构造函数,您已经在推迟到另一个构造函数,所以 Java 不会插入对 super() 的调用那里。

相反,在零参数构造函数 House() ,您不会通过调用 this(...) 来启动它。或 super(...) .所以在那一个中​​,Java 确实插入了 super()为你。

底线,Java 从不调用 Building(String) .在对象的初始化过程中只调用了一个父类(super class)构造函数,它是一个没有参数的构造函数。

关于java - 基于 SCJP 程序的怀疑(EXAM 310-065),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3234073/

相关文章:

java - Jackson CSV 映射器不适用于自定义架构

java - hibernate 一个线程,直到另一个线程参加了一个事件

java - PKCS12 格式的 keystore 对于 keytool 来说似乎是空的,但是被 Firefox 读取了吗?

java - 如何以线程安全的方式填充字符串映射和另一个映射?

c++ - 仅对类 NOT STATIC 的每个对象调用方法一次

java - 是否可以在 java 中使用反射创建没有无参数构造函数的类的 'blank' 实例?

java - scjp 传递对象

constructor - 使用构造函数参数来评估相互依赖的最终值。 flutter/Dart

java - 覆盖 `equals()` 方法在 `HashMap` 中给出意外结果

Java 泛型方法/参数类型