3 回答

TA贡献1856条经验 获得超5个赞
您希望在子类实例化之前执行一些初始化(对抽象类的字段)。 您已经在抽象类中定义了最终字段,但是没有在声明本身中初始化它们;在本例中,您必须有一个构造函数来初始化这些字段。
您可以定义多个构造函数(具有不同的参数)。 你可以(应该吗?)定义所有受保护的构造函数(让它们公开是没有意义的) 您的子类构造函数可以调用抽象类的一个构造函数;它甚至可以调用一个构造函数。 不得不
调用它(如果抽象类中没有no-arg构造函数)

TA贡献1847条经验 获得超11个赞
是! 抽象类可以有构造函数。!

TA贡献1796条经验 获得超4个赞
abstract class Product { int multiplyBy; public Product( int multiplyBy ) { this.multiplyBy = multiplyBy; } public int mutiply(int val) { return multiplyBy * val; }}class TimesTwo extends Product { public TimesTwo() { super(2); }}class TimesWhat extends Product { public TimesWhat(int what) { super(what); }}
Product
TimesTwo
TimesWhat
注意:由于父抽象类中没有默认(或非Arg)构造函数,子类中使用的构造函数必须显式调用父构造函数。
添加回答
举报