即使将类做成抽象类,通过继承的方式仍然可以实现实例化,而且会让用户误以为该类是专门为了继承而设计的
public class Test {
public static void main(String[] args) throws Exception {
UtilityClass utilityClass = new UtilityClassChild();
}
}
abstract class UtilityClass {
}
class UtilityClassChild extends UtilityClass {
}
当类不包含显式的构造器时,编译器会自动生成公有的、无参的缺省构造器,只要让一个类包含一个私有构造器,它就不能被实例化
class UtilityClass {
//禁用构造器
private UtilityClass() {
throw new AssertionError();
}
}
但是这种类无法子类化,因为所有的构造器必须显式或隐式地调用超类构造器,这种情况下,子类没有可访问的超类构造器可用
文章讨论了抽象类的使用,即使抽象类不能直接实例化,通过继承仍可实现。重点强调了无参构造器的默认生成和私有构造器对实例化的影响,以及子类必须显式调用超类构造器的规则。
491

被折叠的 条评论
为什么被折叠?



