抽象类可以有构造函数吗?| Java Debug 笔记

263 阅读2分钟

本文正在参加「Java主题月 - Java Debug笔记活动」,详情查看活动链接

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

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

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

高分回答:

很多的知识点,真的需要写出来才会掌握!!! \color{purple}很多的知识点,真的需要写出来才会掌握!!!{~}

是的,抽象类可以具有构造函数。考虑一下:

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…

作者建议:如果不定义构造函数,则编译器会自动为您生成一个

欢迎关注我的专栏StackOverFlow,我会筛选优质的问答,面试常考!!! \color{red}欢迎关注我的专栏StackOverFlow,我会筛选优质的问答,面试常考!!!{~}

有最新、优雅的实现方式,我也会在文末写出我对本问答的见解 \color{red}有最新、优雅的实现方式,我也会在文末写出我对本问答的见解{~}

真心感谢帅逼靓女们能看到这里,如果这个文章写得还不错,觉得有点东西的话

求点赞👍 求关注❤️ 求分享👥 对8块腹肌的我来说真的 非常有用!!!

如果本篇博客有任何错误,请批评指教,不胜感激 !❤️❤️❤️❤️