如果所有对象都直接或间接继承自Object,那么如何引起编译器拒绝呢?
我认为基础是你的误解是,你 想 的是构造继承。实际上,构造函数不是在Java中继承的。因此,请考虑以下示例:
public class A { public A(int i) { super(); ... }}public class B extends A { public B() { super(); ... }}课程
A:
- 没有继承任何构造函数
Object
, - 没有明确声明一个无参数的构造函数(即
public A() {...}),并且 - 没有默认的构造函数(因为它 确实 声明了另一个构造函数)。
因此,它只有一个构造函数:
public A(int)。
super()在
B类中对的调用尝试在中使用不存在的无参数构造函数,
A并给出编译错误。要解决此问题,您需要更改
B构造函数以使用该
A(int)构造函数,或者在中声明一个显式的无参数构造函数
A。
(顺便说一句,构造函数没有必要像我一样 显式地 调用超类构造函数。但是许多人认为包括显式调用是一种好样式。如果省略它,则Java编译器插入对超类的no-
args构造函数的隐式调用…如果no-args构造函数不存在或对子类不可见,则会导致编译错误。)
这与构造函数是私有的有关吗?
不直接。但是,将构造函数声明为私有将阻止从子类调用该构造函数。



