为什么接口无法实现其他接口?

时间:2010-10-13 06:59:06

标签: java oop inheritance interface

我的意思是:

interface B {...}

interface A extends B {...} // allowed  

interface A implements B {...} // not allowed

我用Google搜索,然后找到了this

  

implements 表示定义接口方法的实现。但是接口没有实现,所以这是不可能的。

但是,interface是100%抽象类,抽象类可以实现接口(100%抽象类)而不实现其方法。定义为“界面”时有什么问题?

详情,

interface A {
    void methodA();
}

abstract class B implements A {} // we may not implement methodA() but allowed

class C extends B {
   void methodA(){}
} 

interface B implements A {} // not allowed. 
//however, interface B = %100 abstract class B

7 个答案:

答案 0 :(得分:101)

implements表示实现,interface只是为了声明提供interface而不是实现。

100%abstract class在功能上等同于interface,但如果您愿意,它也可以实现(在这种情况下,它不会保持100%abstract),所以从JVM的观点是不同的东西。

100%抽象类中的成员变量也可以具有任何访问限定符,其中在接口中它们是隐式public static final

答案 1 :(得分:23)

implements表示将为abstract方法定义一个行为(显然除了抽象类),您可以定义实现。

extends表示行为是继承的。

使用接口可以说一个接口应该具有与另一个接口相同的行为,甚至没有实际的实现。这就是为什么它与extends另一个接口的接口更有意义,而不是实现它。


另外请注意,即使abstract类可以定义abstract方法(界面的理智方式),它仍然是并且仍然必须继承(扩展)而不是实现。

答案 2 :(得分:4)

从概念上讲,有两个“域”类和接口。在这些域中,你总是在扩展,只有一个类实现了一个接口,这是一种“跨越边界”。因此,接口的“扩展”基本上反映了类的行为。至少我认为这是背后的逻辑。似乎并非每个人都同意这种逻辑(我发现自己有点做作),事实上,没有任何技术理由可以使用两个不同的关键字。

答案 3 :(得分:2)

  

但是,接口是100%抽象类,抽象类可以   实现接口(100%抽象类)而不实现它   方法。定义为“界面”时有什么问题?

这只是一个惯例问题。 java语言的编写者认为“扩展”是描述这种关系的最佳方式,所以这就是我们所有人都使用的。

一般来说,即使界面是“100%抽象类”,我们也不会这样想。我们通常将接口视为实现某些关键方法的承诺,而不是从中派生的类。因此,我们倾向于使用不同的语言进行接口而不是类。

正如其他人所说,选择“延伸”而不是“工具”是有充分理由的。

答案 4 :(得分:1)

希望这会对我在大学期间在oops(核心java)中学到的东西有所帮助。

Implements表示定义接口方法的实现。但是接口没有实现,因此不可能。但是,接口可以扩展另一个接口,这意味着它可以添加更多方法并继承其类型。

下面是一个例子,这是我的理解和我在oops中学到的东西。

interface ParentInterface{  
        void myMethod();  
}  

interface SubInterface extends ParentInterface{  
        void anotherMethod();  
}  

并记住一件事,一个界面只能扩展另一个界面,如果你想在某个类上定义它的功能,那么只有一个界面实现,例如下面

public interface Dog
{
    public boolean Barks();

    public boolean isGoldenRetriever();
}

现在,如果一个类要实现这个接口,那就是它的样子:

public class SomeClass implements Dog
{
    public boolean Barks{
    // method definition here

    }

    public boolean isGoldenRetriever{
    // method definition here
    }
}

如果抽象类有一些抽象函数定义和声明,并且你想定义那些函数,或者你可以说实现那些函数,那么你想扩展该类,因为抽象类只能扩展。这是下面的例子。

public abstract class MyAbstractClass {

    public abstract void abstractMethod();
}

以下是MyAbstractClass的示例子类:

public class MySubClass extends MyAbstractClass {

    public void abstractMethod() {
        System.out.println("My method implementation");
    }
}

答案 5 :(得分:0)

接口就像一个不提供任何功能的抽象。因此,它不是“实现”,而是扩展了其他抽象或接口。

答案 6 :(得分:-5)

接口是包含一个无法创建任何对象的抽象方法的类。由于接口无法创建对象而不是纯类,因此无需实现它。