Oracle Java教程站点的这一段使我感到困惑:
所有类都有至少一个构造函数。如果一个类未显式声明任何类,则Java编译器会自动提供一个无参数的构造函数,称为默认构造函数。此默认构造函数调用类父级的无参数构造函数,如果该类没有其他父级,则调用Object构造函数。如果父级没有构造函数(对象确实有一个构造函数),则编译器将拒绝该程序。
如果所有对象都直接或间接继承自Object,那么如何引起编译器拒绝呢?这与构造函数是私有的有关吗?
如果所有对象都直接或间接继承自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构造函数不存在或对子类不可见,则会导致编译错误。)
这与构造函数是私有的有关吗?
不直接。但是,将构造函数声明为私有将阻止从子类调用该构造函数。
我在单元测试中使用,实际上,我已经将Mockito集成到我的单元测试中,它工作得很好。虽然,现在我需要优化一些单元测试,这是一个特殊的依赖注入,注入的对象没有no-arg构造函数,我尝试了,但它不起作用。 @injectmocks Mockito将尝试只通过构造函数注入、setter注入或属性注入来注入mocks,顺序如下所述。 另外,如果只使用,它将抛出: 请参见下面的伪代码: 问题:如何模拟没
问题内容: 如果您尝试封送引用了没有no-arg构造函数的复杂类型的类,例如: 与Java一起的JAXB实现,如下所示: JAXB会抛出一个 现在,我了解了为什么JAXB在解组时需要no-arg构造函数-因为它需要实例化该对象。但是为什么JAXB在编组时需要no-arg构造函数? 另外,还有一个问题,为什么Java的JAXB实现会在字段为null时抛出异常,并且无论如何都不会将其编组? 我是否缺少
问题内容: 我有一个没有默认构造函数的类。我需要一种获取此类的“空白”实例的方法。“空白”表示实例化之后,所有类字段均应具有默认值,例如null,0等。 我问是因为我需要能够序列化/理想化大对象树。而且我无法访问此对象类的源,并且类既没有默认构造函数,也没有实现可序列化的类。尝试序列化这种结构可能不是一个很好的主意,但替代方法是将其转换为更易于序列化的内容。 问题答案: 使用标准反射时,不需要,但
使用Gradle 7.1.1、Java 16、Groovy 3.0.8和Spock 2.0-Groovy3.0 如有任何帮助,不胜感激。 ps.这适用于Java11、Groovy2.5和Spock1.3-Groovy-2.5
主要的 维京阶层 人类阶级 饮料和小便界面是一样的