为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

胡说叔叔 2019-06-24 13:57:05
抽象类可以有构造函数吗?抽象类可以有构造函数吗?如果是的话,如何使用它,以及用于什么目的?
查看完整描述

3 回答

?
RISEBY

TA贡献1856条经验 获得超5个赞

如果您处于以下情况之一,将在抽象类中定义构造函数:

  • 您希望在子类实例化之前执行一些初始化(对抽象类的字段)。
  • 您已经在抽象类中定义了最终字段,但是没有在声明本身中初始化它们;在本例中,您必须有一个构造函数来初始化这些字段。

请注意:

  • 您可以定义多个构造函数(具有不同的参数)。
  • 你可以(应该吗?)定义所有受保护的构造函数(让它们公开是没有意义的)
  • 您的子类构造函数可以调用抽象类的一个构造函数;它甚至可以调用一个构造函数。

    不得不

    调用它(如果抽象类中没有no-arg构造函数)

无论如何,不要忘记,如果您不定义构造函数,那么编译器将自动为您生成构造函数(这个构造函数是公共的,没有参数,什么也不做)。


查看完整回答
1 反对 回复 2019-06-24
?
回首忆惘然

TA贡献1847条经验 获得超11个赞

抽象类可以有构造函数。!

是的,当我们将类定义为抽象类时,它不能被实例化,但这并不意味着抽象类不能有构造函数。每个抽象类必须有一个具体的子类,它将实现该抽象类的抽象方法。

当我们创建任何子类的对象时,相应继承树中的所有构造函数都会在自顶向下的方法中被调用。同样的情况也适用于抽象类。虽然我们不能创建抽象类的对象,但是当我们创建抽象类的一个具体的子类对象时,抽象类的构造函数就会被自动调用。因此,我们可以在抽象类中有一个构造函数。

注意:非抽象类不能有抽象方法,但是抽象类可以有非抽象方法。原因类似于构造函数,不同之处在于,我们可以调用Super(),而不是自动调用它。而且,没有什么比抽象构造函数更有意义的了,因为它根本没有意义。


查看完整回答
1 反对 回复 2019-06-24
?
慕的地8271018

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具有一个构造函数,该构造函数仅对值2进行硬编码。TimesWhat具有允许调用方指定值的构造函数。

抽象构造函数将经常用于强制类约束或不变量,例如设置类所需的最小字段。

注意:由于父抽象类中没有默认(或非Arg)构造函数,子类中使用的构造函数必须显式调用父构造函数。


查看完整回答
反对 回复 2019-06-24
  • 3 回答
  • 0 关注
  • 1658 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号