在这个世界上,没有什么是完美的。他们可能期待更实用的方法。
但是在您的解释之后,您可以使用稍微不同的方法添加这些行。
接口是规则(规则,因为您必须为它们提供无法忽略或避免的实现,以便像规则一样强加它们),它可以作为软件开发中各个团队之间的共同理解文档。
接口给出了要做什么的想法,而不是如何完成。因此,实现完全依赖于开发人员遵循给定的规则(意味着给定的方法签名)。
抽象类可以包含抽象声明和/或具体实现。
抽象声明就像要遵循的规则,具体的实现就像指南(你可以按原样使用它,也可以通过重写并给出你自己的实现来忽略它)。
此外,哪些具有相同签名的方法可能会在不同的上下文中更改行为,这些方法作为接口声明作为规则提供,以便在不同的上下文中相应地实现。
编辑:Java 8 有助于在接口中定义默认和静态方法。
public interface SomeInterfaceOne {
void usualAbstractMethod(String inputString);
default void defaultMethod(String inputString){
System.out.println("Inside SomeInterfaceOne defaultMethod::"+inputString);
}
}
现在,当一个类将实现SomeInterface时,它不是必须为接口的默认方法提供实现。
如果我们有另一个具有以下方法的接口:
public interface SomeInterfaceTwo {
void usualAbstractMethod(String inputString);
default void defaultMethod(String inputString){
System.out.println("Inside SomeInterfaceTwo defaultMethod::"+inputString);
}
}
Java不允许扩展多个类,因为它会导致“钻石问题”,编译器无法决定使用哪个超类方法。使用默认方法,接口也会出现菱形问题。因为如果一个类同时实现两者
SomeInterfaceOne and SomeInterfaceTwo
并且不实现常见的默认方法,编译器无法决定选择哪一个。为了避免这个问题,在java 8中,必须实现不同接口的通用默认方法。如果任何类同时实现上述两个接口,它必须为 defaultMethod() 方法提供实现,否则编译器将抛出编译时错误。