我知道两种禁止继承的方法:
为了防止继承,该类的默认构造函数必须宣布为私有。
class Class {
private Class() {}
}
class OtherClass extends Class {
// Error! There is no default constructor available
}
是否已使用super
完成所有操作?
class Class {
public Class() {}
}
class OtherClass extends Class {
public OtherClass() { super(); } // Did everything done for this opportunity?
}
我想知道为什么你不能从具有私有默认构造函数的类继承以及由什么条件限制?
答案 0 :(得分:3)
在Java中,如果您创建Child Class
的实例,则会隐式创建Parent Class
实例。
因此Parent Class
构造函数应该对Child Class
可见,因为它在第一个语句本身中使用Parent Class
调用super()
构造函数的构造函数。
因此,如果您将Parent Class
的构造函数更改为private
,Child Class
无法访问它并且无法创建自己的任何实例,那么第一手编译器就是根本不允许这样做。
但是,如果您想private
中的Parent Class
默认构造函数,那么您需要在public
&中明确创建一个重载的Parent Class
构造函数。然后在Child class
构造函数中,您需要使用super(param)
Parent Class
的公共重载构造函数来调用。
此外,您可能会想到private
构造函数的用途。 private
构造函数主要用于您不希望任何外部类中的其他人在您的课程上调用new()
的情况。因此,在这种情况下,我们提供了一些getter()
方法来提供课程object
。在该方法中,您可以创建/使用您班级的现有对象&从那个方法中返回。
EG。 Calendar cal = Calendar.getInstance();
。这实际上构成了Singleton
设计模式的基础。
答案 1 :(得分:1)
它是否是默认构造函数并不重要。如果类的所有构造函数都是私有的,那么它的子类型都不能有有效的构造函数,因为所有构造函数都必须为超类型调用构造函数。