我找不到解决此继承问题的方法。我正在开发一个程序,该程序将存储有关天体的信息。我有一个抽象超类Body
,所有其他天体都应从该类继承。现在,我希望某些机体默认具有用于存储有关运行中的物体的信息的实现;有些实体应该是Orbitable
,有些应该是Orbital
。例如星星仅是orbitable
,行星和卫星都是orbitable
和orbital
,小行星仅是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
超类)。我尝试过使用带有默认方法的接口,但是关键问题是实现涉及读取或修改对象的状态,这不能通过接口实现,因为接口中的所有变量都是隐式静态的。
我也查看了有关非常相似问题的this和this帖子,但是状态的继承使我感到悲伤。
那么,如何解决这个多重继承问题呢? Java甚至可能吗?还有其他设计可以解决此问题吗?
谢谢。
最佳答案
Orbitable
和Orbital
,它们定义(但显然不实现)您想要的状态操作的方法。 OrbitableBody extends Body implements Orbitable
OrbitalBody extends Body implements Orbital
OrbitableOrbitalBody extends Body implements Orbitable, Orbital
并使这三个类从接口实现方法。
Body
,OrbitableBody
,OribtalBody
或OrbitableOrbitalBody
。 然后,它们将全部成为一个Body,实现正确的接口,并且
继承接口定义的方法的默认实现。