Java,是否可以继承接口?

时间:2012-07-23 08:44:48

标签: java inheritance interface

在我的应用程序中,我有一个课程,让我称之为课程A。我可以将这四个课程称为BCDE。这四个类中的每一个都有一个功能相同的接口。

我想知道我是否将此接口放在类A中,所有这些类都可以访问它。我是对的吗?

我有另一个正在实现此接口的类G。如果我实现这个接口,它是否同时适用于这四个库?

更新 让我详细说明一下。 我有四节课。每个类都有一个方法,当这个类连接到互联网时会设置一个标志。像这样。

public class ClassB extends {

    public interface OnConnectingToServer {
        public void onGettingDataFromServer(boolean flag);
    }

    public ClassB () {
        if(I'm_downloading_from_internet)
                OnConnectingToServer.onGettingDataFromServer(true);
    }
}

我对“B”,“C”,“D”和“E”类有这种情况。类“G”实现此接口。如果我想在每个类中放置每个接口,我需要分配四个不同的名称ans在“G”类中也实现了4个接口。 我认为这种方式不是一个好方法。

我正在寻找一种方法,而不是实现4个相同的接口,只实现一个接口。因此,无论是通过一个类还是所有四个类触发接口,只需执行一个实现。

希望更清楚。再次感谢。

4 个答案:

答案 0 :(得分:4)

不要将接口定义放在类A中。将它作为单独的顶级类型,然后创建所有类implements MyInterface。如果class B extends A,那么您不必明确说出implements MyInterface,因为子类无法“实现”接口。

答案 1 :(得分:2)

  • 是的,如果让A实现一个接口,那么扩展该类的所有类也会实现该接口。
  • G实现界面并不完全确定你的意思。这样做只会影响扩展G
  • 的类

答案 2 :(得分:2)

简而言之,是的。来自Java Language Spec

  

可以声明一个类直接实现一个或多个接口,   意味着该类的任何实例都实现了所有的抽象   接口或接口指定的方法。 一定要上课   实现其直接超类和直接的所有接口   超级接口 。这个(多个)接口继承允许   对象支持(多个)共同行为而不共享任何行为   实施

(我的重点)

答案 3 :(得分:1)

如果在A类和B类中实现接口(称之为I),C + D扩展A然后B,C和D也将实现I接口。

这意味着你可以写:

I aInstance = new A();
I bInstance = new B();

但也是:

A aInstance = new A();
A bInstance = new B():

因为逻辑上您的数据模型将变为:

A is an I 
and  
B is an A 
so this implies:
B is an I

如果G类实现了接口但没有继承A,那么您也必须实现G类中I中定义的功能。

这意味着你可以写:

I aInstance = new A();
I gInstance = new G();

但不是这个(这不会编译):gInstance = new G();

请记住,界面只是一份合同。任何实现接口的类都必须遵守合同,但不继承任何实现(无论如何都不能在接口中实现)。