据说Java可以通过实现多个接口来实现多重继承。根据有关继承的Java文档here:
子类从其超类继承所有成员(字段,方法和嵌套类)。继承的想法很简单但很强大:当你想创建一个新类并且已经有一个包含你想要的代码的类时,你可以从现有的类派生你的新类。在这样做时,您可以重用现有类的字段和方法,而无需自己编写(和调试!)它们。
和关于接口here,它说接口没有实现方法。它们只包含方法声明。另外,据我所知,接口也不包含嵌套类。还有一点,并非所有接口都有常量字段,很多时候接口(我用于工作)只包含方法声明。
在这种情况下,如果我们必须自己定义所有方法,我们真正从它们那里继承了什么?我非常了解接口的其他用途。但是我没有得到与继承有什么关系。
答案 0 :(得分:3)
接口提供契约,这意味着当类实现接口时,根据定义它提供了一组方法。如何实现这些是由实现接口的类。
考虑:
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
接口可以保证它。没有任何东西是继承的,没有扩展功能,只保证一组功能。委托逻辑等。
答案 1 :(得分:3)
在这种情况下,如果我们必须自己定义所有方法,我们真正从它们那里继承了什么?
在经典Java(7及更早版本)中,实现一个接口可以:
在Java 8中,您还继承了接口中声明的default
方法。
一个类implements
接口并不固有任何状态声明,或者可以访问状态声明的方法,就像extend
类一样。但另一方面,一个类可以implement
多个接口......你无法使用extend
。
简而言之,implements
允许您执行使用extends
和反之亦然无法执行的操作。