抽象类可以有构造函数吗?

抽象类可以有构造函数吗?

抽象类可以有构造函数吗?

如果是的话,如何使用它,以及用于什么目的?


胡说叔叔
浏览 1659回答 3
3回答

RISEBY

如果您处于以下情况之一,将在抽象类中定义构造函数:您希望在子类实例化之前执行一些初始化(对抽象类的字段)。您已经在抽象类中定义了最终字段,但是没有在声明本身中初始化它们;在本例中,您必须有一个构造函数来初始化这些字段。请注意:您可以定义多个构造函数(具有不同的参数)。你可以(应该吗?)定义所有受保护的构造函数(让它们公开是没有意义的)您的子类构造函数可以调用抽象类的一个构造函数;它甚至可以调用一个构造函数。不得不调用它(如果抽象类中没有no-arg构造函数)无论如何,不要忘记,如果您不定义构造函数,那么编译器将自动为您生成构造函数(这个构造函数是公共的,没有参数,什么也不做)。

回首忆惘然

是! 抽象类可以有构造函数。!是的,当我们将类定义为抽象类时,它不能被实例化,但这并不意味着抽象类不能有构造函数。每个抽象类必须有一个具体的子类,它将实现该抽象类的抽象方法。当我们创建任何子类的对象时,相应继承树中的所有构造函数都会在自顶向下的方法中被调用。同样的情况也适用于抽象类。虽然我们不能创建抽象类的对象,但是当我们创建抽象类的一个具体的子类对象时,抽象类的构造函数就会被自动调用。因此,我们可以在抽象类中有一个构造函数。注意:非抽象类不能有抽象方法,但是抽象类可以有非抽象方法。原因类似于构造函数,不同之处在于,我们可以调用Super(),而不是自动调用它。而且,没有什么比抽象构造函数更有意义的了,因为它根本没有意义。

慕的地8271018

是的,抽象类可以有构造函数。考虑到这一点: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具有一个构造函数,该构造函数仅对值2进行硬编码。TimesWhat具有允许调用方指定值的构造函数。抽象构造函数将经常用于强制类约束或不变量,例如设置类所需的最小字段。注意:由于父抽象类中没有默认(或非Arg)构造函数,子类中使用的构造函数必须显式调用父构造函数。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java