Java 使用接口的默认方法实现方法-矛盾? 介绍
我在这里读过多篇关于实现接口和抽象类的文章。我特别发现了一个我想在这里链接的问题-,它涉及同样的问题。作为公认的答案,建议在可能的情况下使用接口的默认方法。但下面的评论说明了我的问题:“这个功能对我来说更像是一个黑客。” 已经引入了默认方法,以使接口的实现更加灵活-当接口发生更改时,在实现类中不一定需要(重新)编写代码。因此,使用一个接口的默认方法只是为了在所有实现类中实现一个方法——quote:“对我来说更像是一个黑客” 我考试的例子: 课程概述:Java 使用接口的默认方法实现方法-矛盾? 介绍,java,inheritance,interface,java-8,default-method,Java,Inheritance,Interface,Java 8,Default Method,我在这里读过多篇关于实现接口和抽象类的文章。我特别发现了一个我想在这里链接的问题-,它涉及同样的问题。作为公认的答案,建议在可能的情况下使用接口的默认方法。但下面的评论说明了我的问题:“这个功能对我来说更像是一个黑客。” 已经引入了默认方法,以使接口的实现更加灵活-当接口发生更改时,在实现类中不一定需要(重新)编写代码。因此,使用一个接口的默认方法只是为了在所有实现类中实现一个方法——quote:“对我来说更像是一个黑客” 我考试的例子: 课程概述: Item-所有项的抽象超类 水-消耗品 石
- Item-所有项的抽象超类
- 水-消耗品
- 石材-非消耗性物品
- 消耗品-与消耗品项的某些方法的接口(这些方法必须由所有实现类重写)
protected abstract boolean isConsumable();
//return true if class implements (or rather "is consumable") Consumable and false in case it does not
快速编辑:我知道instanceof可能会解决这个特定的例子——如果可能的话,考虑一个更复杂的例子,首先需要实现这个方法。(感谢Sp00m和尤金)
现在我有几个选择:
isConsumable()
),接口将实现几个默认方法,这与接口不实现实际方法的想法相矛盾
isConsumable()//return false
),然后在子超类中重写它。这里出现的问题是:当扩展应用程序并引入更多的子超类(作为可消耗类)时,实际项目将开始扩展多个子超类。这可能不是一件坏事,因为对接口也必须这样做,但这会使继承树变得复杂-例如:一个项现在可能扩展一个子超类ALayer2,它是ALayer1的子超类,ALayer1扩展了项(layer0)
- 这是我列出的选项之一吗
- 这是它们的变体吗
- 还是我还没有考虑过的另一个选择
项
本身中提供方法
假设消耗品可通过消耗品-界面识别,以下是我无法推荐您列出的大多数要点的原因:
第一个(即在每个子类中实现它)对于像这个实例这样简单的消耗品来说太难了。第二个也许可以,但不是我的第一选择。第三个和第四个我完全不能推荐。如果我能给出一个建议的话,那就是可能要再三考虑继承问题,永远不要使用中间类
public final boolean isConsumable() {
return this instanceof Consumable;
}