0

在我的应用程序中,我有一个类,让我称之为 class A。四个类,让我称它们为B, CDE从这个类扩展。这四个类中的每一个都有一个功能相同的接口。

我想知道我是否将这个接口放在类中,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”类,实现了这个接口。因此,如果我想将每个接口放在每个类中,我需要分配四个不同的名称,并且在“G”类中也实现了 4 个接口。我认为这种方式不是一个好方法。

我正在寻找一种方法,而不是实现 4 个相同的接口,而只实现一个接口。因此,无论是由一个类还是全部四个类触发接口,都只完成一个实现。

希望把它说得更清楚。再次感谢。

4

4 回答 4

4

Don't put the interface definition inside class A. Make it a separate top-level type and then make all your classes implements MyInterface. If class B extends A, then you don't have to explicitly say implements MyInterface since there is no way for a subclass to "unimplement" an interface.

于 2012-07-23T08:47:40.813 回答
2
  • Yes, if you let A implement an interface, then all classes that extend that class also implement that interface.
  • Not entirely sure what you mean with letting G implement the interface. Doing that will only affect classes that extend G.
于 2012-07-23T08:47:56.740 回答
2

简而言之,是的。来自Java 语言规范

一个类可以被声明为直接实现一个或多个接口,这意味着该类的任何实例都实现了由一个或多个接口指定的所有抽象方法。一个类必须实现其直接超类和直接超接口所做的所有接口。这种(多个)接口继承允许对象在不共享任何实现的情况下支持(多个)公共行为。

(我的重点)

于 2012-07-23T08:48:39.083 回答
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();

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

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

于 2012-07-23T08:49:39.110 回答