java - java中的构造函数

标签 java constructor

public class A {
public A() {
    System.out.println("a1");
}
public A(int x) {
    System.out.println("a2");

}}

public class B extends A {
public B() {
    super(5);
    System.out.println("b1");
}
public B(int x) {
    this();
    System.out.println("b2");
}
public B(int x, int y) {
    super(x);
    System.out.println("b3");
}}

我不明白为什么当我运行 B b= new B(); 时不应用 A 的默认结构;

B 扩展了 A,所以首先我们调用 A 的构造来打印“a1”,然后我们调用 A 的第二个构造来打印“a2”,然后 B() 打印“b1”,但是当我运行它时,它只打印“a2,b1”,所以显然 A() 不会在开始时应用 - 为什么?

最佳答案

当你说B b = new B();时,你正在调用默认构造函数

public B() {
    super(5);
    System.out.println("b1");
}

由于这已经调用了其 super 构造函数 [super(5)],因此编译器不会插入隐式默认构造函数。这就是结果。

注意:从您的问题来看,您似乎认为创建对象时会调用所有构造函数。恐怕这是不正确的。只有您显式调用来创建对象的构造函数才会被调用。如果该构造函数通过 this() 方法调用其他构造函数,那么其他构造函数才会被调用。

关于java - java中的构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7293356/

相关文章:

java - 如何使用扫描仪读取回车符作为字符串的一部分?

java - 是否正在创建一个私有(private)构造函数来测试不良做法?

scala - 依赖类型不适用于构造函数?

java - 如何禁止 JFormattedTextField 中的字符?

java - NamedParameterJdbcTemplate.batchUpdate() 采用 Map<String,Object> 数组,如何实例化参数数组以免收到警告?

java - 是否有与嵌套类关联的构造函数

scala - 在辅助构造函数中传递可变参数

C++ 对列表

java - 安卓时间问题

java - 单击按钮时有状态 session Bean 更新(?)