加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

java – 构造器不是类的成员?

发布时间:2020-12-14 16:37:00 所属栏目:Java 来源:网络整理
导读:构造器不是类的成员?如果是,为什么不能继承? JLS 7.0 says that constructors are not members因此不能继承.对于Java来说,这是真的吗,还是一般的OOP范式? 解决方法 构造函数不是因为良好的设计原因而被继承.如果它们是继承的,那么您将有问题尝试将它们隐
构造器不是类的成员?如果是,为什么不能继承?

JLS 7.0 says that constructors are not members因此不能继承.对于Java来说,这是真的吗,还是一般的OOP范式?

解决方法

构造函数不是因为良好的设计原因而被继承.如果它们是继承的,那么您将有问题尝试将它们隐藏在继承的类中.

考虑这个例子:

class Plane{
    public Plane(int passengerCapacity,int cargoCapacity){...}
}
class F18 extends Plane{
    public F18(){
        super(0,0);
        ....
    }
}

现在,以下构造函数有意义吗?

Plane p = new F18(0,0);

不是真的,因为子类是父类的一个特殊情况.在这个特定的例子中,在F18类中提供Plane构造函数是没有意义的;子类希望控制父类的构造方式.

如果构造函数是继承的,有人希望隐藏父构造函数,则可能会尝试执行以下操作:

class F18{
    Plane innerPlane;
    public F18(){
        innerPlane = new Plane(0,0);
    }
}

不是一个真正的解决方案,因为在每个方法和属性中,都必须写返回innerPlane.SomeMethod(),这几乎违背了继承的目的.

这个主体也适用于其他OOP语言(例如C#).

但是如果我真的想继承许多小孩类中的构造函数怎么办?

那么你的架构是错误的.你实际上不需要继承来解决你的问题.您可以抽象另一个基类/接口中不同的部分.例如

class Plane{
    IPilot Pilot;
    public Plane(int passengerCapacity,int cargoCapacity,IPilot pilot){...}
}

构造函数是构造对象的方法.你真的需要许多可以以相同的方式构建的子类(并且使用相同的逻辑,因为它们是继承的),还是一个可以灵活地去掉它的一些组件的类?

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读