本文正在参加「Java主题月 - Java Debug笔记活动」,详情查看活动链接
抽象类可以有构造函数吗?
抽象类可以有构造函数吗?
如果是这样,它将如何使用以及用于什么目的?
高分回答:
是的,抽象类可以具有构造函数。考虑一下:
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具有允许调用者指定值的构造函数。
抽象构造函数将经常用于强制执行类约束或不变量,例如设置类所需的最小字段。
注意:由于父抽象类中没有默认(或无参数)构造函数,因此在子类中使用的构造函数必须显式调用父构造函数。
高分回答:
如果您处于以下情况之一,则可以在抽象类中定义一个构造函数:
您想在实际实例化子类之前执行一些初始化(到抽象类的字段)
您已经在抽象类中定义了final字段,但是没有在声明本身中对其进行初始化;在这种情况下,您必须具有构造函数来初始化这些字段
注意:
您可以定义多个构造函数(使用不同的参数)
您可以(应该?)定义所有受保护的构造函数(无论如何将它们公开都是毫无意义的)
您的子类构造函数可以调用抽象类的一个构造函数;它甚至可能必须调用它(如果抽象类中没有no-arg构造函数)
无论如何,请不要忘记,如果不定义构造函数,则编译器会自动为您生成一个(此构造函数是公共的,没有参数,并且不执行任何操作)。
文章翻译自kgs4h5t57thfb6iyuz6dqtun5y-ac4c6men2g7xr2a-stackoverflow-com.translate.goog/questions/2…
作者建议:如果不定义构造函数,则编译器会自动为您生成一个
真心感谢帅逼靓女们能看到这里,如果这个文章写得还不错,觉得有点东西的话
求点赞👍 求关注❤️ 求分享👥 对8块腹肌的我来说真的 非常有用!!!
如果本篇博客有任何错误,请批评指教,不胜感激 !❤️❤️❤️❤️