gpt4 book ai didi

java - 如何绕过这个多重继承问题?

转载 作者:行者123 更新时间:2023-12-01 11:28:53 24 4
gpt4 key购买 nike

我找不到这个继承问题的解决方案。我正在开发一个程序,该程序将存储有关天体的信息。我有一个抽象父类(super class),Body ,所有其他天体都应继承。现在,我希望一些天体默认实现存储有关轨道天体的信息;一些机构应该是Orbitable有些应该是Orbital .例如一颗星是orbitable只是,行星和卫星都是 orbitableorbital , 小行星是 orbital只要。

public abstract class Orbital {

Body host;

protected double avgOrbitalRadius;
protected double orbitalPeriod;

public double getOrbitalRadius(){return this.avgOrbitalRadius;}
public double getOrbitalPeriod(){return this.orbitalPeriod;}

}
public abstract class Orbitable {

List<Body> satellites = new ArrayList<>();

public void addSatellite(Body sat){
satellites.add(sat);
}

public boolean hasSatellite(Body sat){
for(Body body : satellites){
if(sat.equals(body)) return true;
}
return false;
}

public boolean hasSatellite(String satName){
for(Body body : satellites){
if(satName.equals(body.getName())) return true;
}
return false;
}

public Body getSatellite(String satName){
for(Body body : satellites){
if(satName.equals(body.getName())) return body;
}
return null;
}
}

我需要让对象能够继承上述实现中的一个、两者或都不继承(加上描述任何天体基础的 Body 父类(super class))。
我尝试过使用带有默认方法的接口(interface),但关键问题是实现涉及读取或修改对象的状态,这不能用接口(interface)实现,因为接口(interface)中的所有变量都是隐式静态的。

我也看过 thisthis关于非常相似的问题的帖子,但状态的继承让我感到悲伤。

那么,我该如何解决这个多重继承问题呢?在Java中甚至可能吗?是否有其他设计可以规避这个问题?
谢谢。

最佳答案

  • 创建接口(interface) OrbitableOrbital ,为您想要的状态操作定义(但显然不实现)方法。


  • 创建三个(抽象)类
  • OrbitableBody extends Body implements Orbitable
  • OrbitalBody extends Body implements Orbital
  • OrbitableOrbitalBody extends Body implements Orbitable, Orbital

  • 并使这三个类实现接口(interface)中的方法。

  • 让你的天体扩展出四个拟合类:Body , OrbitableBody , OribtalBodyOrbitableOrbitalBody .


  • 然后它们都将成为一个 Body,实现正确的接口(interface),并且
    继承接口(interface)定义方法的默认实现。

    关于java - 如何绕过这个多重继承问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61625409/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com