gpt4 book ai didi

java - Java 类怎么可能没有无参构造函数呢?

转载 作者:太空狗 更新时间:2023-10-29 22:36:15 26 4
gpt4 key购买 nike

Oracle Java 教程站点有这段让我感到困惑:

All classes have at least one constructor. If a class does not explicitly declare any, the Java compiler automatically provides a no-argument constructor, called the default constructor. This default constructor calls the class parent's no-argument constructor, or the Object constructor if the class has no other parent. If the parent has no constructor (Object does have one), the compiler will reject the program.

如果所有对象都直接或间接继承自 Object,怎么可能引起所说的编译器拒绝?是否与构造函数是私有(private)的有关?

最佳答案

If all objects directly or indirectly inherit from Object how is it possible to elicit the compiler rejection spoken of?

我认为您误解的基础是您认为构造函数是继承的。事实上,构造函数在 Java 中不是继承的。因此请考虑以下示例:

public class A {
public A(int i) { super(); ... }
}

public class B extends A {
public B() { super(); ... }
}

A 类:

  • 不从Object继承任何构造函数,
  • 没有显式声明无参数构造函数(即 public A() {...}),并且
  • 没有默认构造函数(因为它确实声明了另一个构造函数)。

因此,它只有一个构造函数:public A(int)

B 类中调用 super() 试图在 A 中使用一个不存在的无参数构造函数并给出一个编译错误。要解决此问题,您需要更改 B 构造函数以使用 A(int) 构造函数,或者在 A .

(顺便说一句,构造函数没有必要显式调用父类(super class)构造函数...正如我所做的那样。但是很多人认为包含显式调用是一种很好的风格. 如果你省略它,Java 编译器会插入一个对父类(super class)无参数构造函数的隐式调用......如果无参数构造函数不存在或对子类不可见,这将导致编译错误。)

Does it have to do with the constructor being private?

不直接。但是,将构造函数声明为私有(private)将阻止从子类调用该构造函数。

关于java - Java 类怎么可能没有无参构造函数呢?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5286348/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com