Java 接口实现隐藏方法

Java 接口实现隐藏方法,java,inheritance,interface,Java,Inheritance,Interface,我需要关于接口的建议。我有一个叫做Unit的类,它可以攻击其他单位。攻击可以是空中或地面。我需要一种方法来实现名为attack()的攻击。一些单位只能攻击地面单位,一些空中单位或两者兼而有之 这就是我到目前为止所说的: public interface Attack() { public void attack(SCObject object); } public interface GroundAttack() extends Attack { public void gro

我需要关于接口的建议。我有一个叫做Unit的类,它可以攻击其他单位。攻击可以是空中或地面。我需要一种方法来实现名为
attack()
的攻击。一些单位只能攻击地面单位,一些空中单位或两者兼而有之

这就是我到目前为止所说的:

public interface Attack() {
    public void attack(SCObject object);
}

public interface GroundAttack() extends Attack {
    public void groundAttack(SCObject object);
}

public interface AirAttack() extends Attack {
    public void airAttack(SCObject object);
}
我可以有不同的单位:

Unit extends SCObject implements GroundAttack {
}

Unit extends SCObject implements AirAttack {
}

Unit extends SCObject implements AirAttack, GroundAttack {
}
问题是这个实现将显示两个地面和空中选项,而我只希望
attack()
方法可见。 您能提出解决方案吗?或者您觉得这样行吗?

我会使用

public interface Attack {
    public boolean canAttack(SCObject object);
    public void attack(SCObject object);
}
如果你不想暴露这种行为,我认为没有理由使用特定的地面或空中攻击方法。

我认为or模式可能适用于此,因为攻击能力取决于攻击者和受害者之间的交互


攻击者
攻击()
,并将自身作为参数传递的某种调用形式将允许受害者确定攻击的有效性。请注意,这可能允许您在运行时更改攻击性(例如,“地面”单元能否升空?

您的限制(空中与地面)是静态的(即编译时可解析)还是动态的(运行时可解析)?访客模式在这里可能也很有用。@BrianAgnew感谢您修复了输入错误。如果您不实现任何接口单元,则无法进行攻击。不实施空袭的部队不能攻击飞行部队。@locke这项要求从何而来?这是你必须忍受的事情还是你可以解决的事情?@PeterLawrey这是我的想法,我想解决它。