当我们在Java中实现许多接口时,我们真正继承了什么?
据说Java有一个替代方案,可以通过实现多个接口来实现多重继承。根据Java文档中关于继承的内容,我们发现: 子类从其超类继承所有成员(字段、方法和嵌套类)。继承的思想很简单,但功能强大:当您想要创建一个新类,并且已经有一个类包含您想要的一些代码时,您可以从现有类派生新类。通过这样做,您可以重用现有类的字段和方法,而无需自己编写(和调试!) 关于接口,它说接口没有实现方法。它们只包含方法声明。而且,据我所知,接口也不包含嵌套类。还有一点,并不是所有的接口都有常量字段,很多时候接口(我在工作中使用的)只包含方法声明当我们在Java中实现许多接口时,我们真正继承了什么?,java,inheritance,Java,Inheritance,据说Java有一个替代方案,可以通过实现多个接口来实现多重继承。根据Java文档中关于继承的内容,我们发现: 子类从其超类继承所有成员(字段、方法和嵌套类)。继承的思想很简单,但功能强大:当您想要创建一个新类,并且已经有一个类包含您想要的一些代码时,您可以从现有类派生新类。通过这样做,您可以重用现有类的字段和方法,而无需自己编写(和调试!) 关于接口,它说接口没有实现方法。它们只包含方法声明。而且,据我所知,接口也不包含嵌套类。还有一点,并不是所有的接口都有常量字段,很多时候接口(我在工作中使用
在这种情况下,如果我们必须自己定义所有的方法,那么我们从它们那里真正继承了什么呢?我非常了解接口的其他用途。但是我不明白它与继承有什么关系。接口提供了一个契约,这意味着当一个类实现一个接口时,根据定义,它提供了一组方法。如何实现这些由实现接口的类决定 考虑:
public interface IPrint
{
public void print(String str);
}
public interface IClean
{
public void clean();
}
public class CanonPrint implements IPrint, IClean //Prints to a physical canon printer
{
public void print(String str)
{
//Send data to canon printer
}
public void clean()
{
//Clean printer buffer, etc
}
}
public class Console implements IPrint, IClean //Prints to a console
{
public void print(String str)
{
//Send data to console
}
public void clean()
{
//Clean console buffer, etc
}
}
在上面的示例中,您知道CanonPrint
和ConsolePrint
类可以自己打印和清理,它们有这样做的逻辑,它们实现IPrint
和IClean
接口的事实保证了这一点。没有任何东西是继承的,没有任何功能被扩展,只有一组功能。逻辑等是委托的
在这种情况下,如果我们必须自己定义所有的方法,那么我们从它们那里真正继承了什么呢
在经典Java(7及更早版本)中,实现一个接口可以提供:
- 与抽象的“是-是”关系
- 必须实现的一组方法签名(以满足“is-a”关系),以及
- 一个隐含的“契约”,说明这些方法应该做什么
default
方法
的确,实现的类
接口并不固有任何状态声明,也不存在可以访问状态声明的方法,如果它扩展了一个类的话。但另一方面,一个类可以实现多个接口。。。这是用extend
无法做到的
简而言之,
implements
允许您做extends
无法做的事情,反之亦然。我想补充一点,因为Java8可以在接口中实现方法。是的。我完全同意。但是,我们从他们那里继承了什么?因为继承,我们可以直接调用实现的超类的公共和受保护方法。@NullPointer继承告诉我们类是什么。接口告诉类可以存储什么。例如,ArrayList是一种抽象列表,但声明它可以被克隆和序列化。Ok。因此,这只是两个类包含的一组公共特性。这种相似性被表示为继承,不是吗?现在我明白了。谢谢Stephen C。接口可以包含嵌套类。