java如何强制定义构造函数
我有一个接口I,它是由基类B实现的。基类由一群类(a、C、D)扩展,这些类必须初始化基类B中声明的一些受保护的变量。我想在子类(a、C、D)中强制声明构造函数,阻止用户依赖B中声明的默认构造函数。但是我希望B的默认构造函数自动执行,因为B本身也可以使用。我怎样才能做到这一点
谢谢
你可以在下面搜索框中键入要查询的问题!
我有一个接口I,它是由基类B实现的。基类由一群类(a、C、D)扩展,这些类必须初始化基类B中声明的一些受保护的变量。我想在子类(a、C、D)中强制声明构造函数,阻止用户依赖B中声明的默认构造函数。但是我希望B的默认构造函数自动执行,因为B本身也可以使用。我怎样才能做到这一点
谢谢
# 1 楼答案
如果B类将有自己的默认构造函数,那么您想要的是不可能的。当您从一个类派生时,您告诉编译器它应该为派生类的每个实例中的基类对象分配内存。没有办法告诉java编译器在每次继承某个基类时,都会突然删除它的一些功能
还要注意,构造函数和静态工厂方法不能是抽象的,所以即使B可以是抽象类,也必须执行以下操作:
。。。同时确保派生类实现调用super()的默认构造函数
# 2 楼答案
将抽象超类B与私有构造函数一起使用:
或类似
# 3 楼答案
将B的默认构造函数设为私有,并调用this();从参数化构造函数中
编辑:错过阅读问题,从类声明中删除抽象关键字。还添加了用于创建B类的公共静态工厂方法。它调用B的默认构造函数