java - 我们可以为 Java 中的构造函数提供返回类型吗?

标签 java constructor

以下代码给出编译错误:

class parent {
  parent(int a){}
}

class child extends parent{}

错误:

Main.java:6: cannot find symbol
symbol  : constructor parent()
location: class parent
class child extends parent{}
^
1 error

我尝试做不同的事情,发现向父构造函数添加返回类型可以消除错误!!!

class parent {
  int parent(int a){}
}

class child extends parent{}

我读到构造函数不应该有返回类型,这显然不是一直都是正确的。所以我的问题是我们什么时候应该有构造函数的返回类型?

最佳答案

情况 1 中,子类没有任何构造函数,因此编译器会为您添加一个默认构造函数,并添加对父类(super class)构造函数的调用。所以你的子类实际上看起来像:

class child extends parent {
 child() {
  super();
 }
}

调用 super() 在基类中查找零参数构造函数,因为没有这样的构造函数,所以会出现错误。

情况2中父父类没有任何构造函数

int parent(int x) {} 不是构造函数,因为它有返回类型。它只是一个具有类名的方法。子类也没有任何构造函数。因此编译器为子类和父类添加了默认构造函数,还添加了对父类(super class)构造函数的调用:

class parent {
 parent() {
  super(); // calls Object class ctor.
 }
  int parent(int x) {} // not a ctor.
}

class child extends parent {
 child() {
  super();
 }
}

关于java - 我们可以为 Java 中的构造函数提供返回类型吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3501680/

相关文章:

java - "If"语句,常量相等

java - 什么是对接框架以及何时使用它?

java - 使用有界通配符推断类型的问题

java - 无法使用泛型转换为非特定的嵌套类型

node.js - 通过静态函数的异步构造函数,但await不起作用

java - 使用 GAE 文件服务 API

c++ - 将 "zero"值设置为成员变量

c++ - 初始化另一个类对象中的对象。(在该构造函数上执行一些操作之后。)

c++ - std::priority_queue 不同比较

C++实例化在另一个没有指针的类构造函数中没有默认构造函数的对象