在我的应用程序中,我有一个课程,让我称之为课程A
。我可以将这四个课程称为B
,C
,D
和E
。这四个类中的每一个都有一个功能相同的接口。
我想知道我是否将此接口放在类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个相同的接口,只实现一个接口。因此,无论是通过一个类还是所有四个类触发接口,只需执行一个实现。
希望更清楚。再次感谢。
答案 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();
请记住,界面只是一份合同。任何实现接口的类都必须遵守合同,但不继承任何实现(无论如何都不能在接口中实现)。