我只是好奇,允许接口包含静态方法的实现会不会更方便?这些方法可能包含常用的短(通过此接口实现者)逻辑。
答案 0 :(得分:6)
因为界面描述什么。它没有描述如何。
答案 1 :(得分:3)
如果你真的想要在界面中添加(隐藏)某些逻辑,你可以考虑添加一个内部类(注意:永远不要这样做,这只是从纯技术角度展示了什么是可能的):
public interface Person {
public String getFirstName();
public String getLastName();
public class Util {
public String getName(Person person) {
return person.getFirstName() + " " + person.getLastName();
}
}
}
如果您使用它,它“感觉”有点像在界面中使用静态方法代码:
String fullName = Person.Util.getName(this);
正如我所说 - 它在技术上是纯粹的,我认为没有任何理由去实际做到这一点。静态方法可以位于任何类中,无需将其添加到接口。
答案 2 :(得分:1)
界面是合约。它说实现对象将具有什么(至少),但这就是全部。它说“这房子将有一扇门,一扇窗户和一个烟囱”。
抽象类更像是一个预制房屋。它不完整(例如你必须添加自己的壁板)但它已经有部件(门有一个空间,但整个壁炉已经安装好了。
在接口中提供代码的问题是多重继承。 Java不允许它。你可以让一个类实现许多接口,因为接口只承诺会有一个给定签名的方法。
如果接口持有代码,那么你可以实现其中的3个,每个都有myUsefulFunction(String thing)的方法体......现在你不知道哪个被调用了。
这就是为什么抽象类可以有方法体(因为你只能扩展一个类),但接口不能(因为你可以实现多个接口)。
答案 3 :(得分:1)
我同意静态方法在接口中没有意义。但我不明白为什么java允许接口中的静态成员。似乎有点不一致。
答案 4 :(得分:0)
这是应该实现某些东西的抽象类或常规类。接口不应该有任何实现,但它们包含通信接口。所以不允许使用静态方法。
答案 5 :(得分:0)
接口是一个包含所有抽象方法的特殊抽象类。
你可以随意创建一个包含(非抽象)静态方法的自己的抽象类,但是你只能从其中一个继承。
更好的是,使用静态方法创建一个单独的帮助器类。