HI 我有一个问题如果接口有四个方法,我只想实现两个方法,如何实现呢?
任何解释都是可能的,或者我应该去实施所有方法。
答案 0 :(得分:4)
如果不声明实现类抽象,则不能“部分”实现接口,因此需要某些子类提供剩余的实现。原因是接口是契约,实现它声明“我提供接口指定的行为”。其他一些代码将通过声明的接口使用您的类,并期望这些方法存在。
如果您知道用例不使用其他两种方法,则可以通过抛出OperationNotSupported来实现它们。这是否有效取决于接口和用户。如果接口可以通过这种方式合法地部分实现,那么接口设计不良并且可能应该是两个接口的代码气味。
你也可以通过什么都不做来“实现”接口,尽管这通常只适用于“监听器”或“回调”实现。
简而言之,一切都取决于。
答案 1 :(得分:2)
您可以创建实现类abstract
并从接口实现4种方法中的两种。
答案 2 :(得分:2)
如果您控制界面的设计,只需将其分成两部分即可。一个接口指定两个只有一些实现实现,一个接口指定另外两个(或继承前两个并添加更多,您的选择)
答案 3 :(得分:2)
我认为@sateesh的回答是更接近解决问题的答案。让我详细说明一下。首先,任何实现接口的类都必须提供所有方法的定义。但在某些情况下,用户可能会发现界面中的大多数方法没有用,除了一两个。考虑以下具有6种抽象方法的接口:
public interface HugeInterface {
void a();
void b();
void c();
void d();
void e();
void f();
}
假设您的代码仅用于方法'c()',并且您希望仅为方法'c()'提供实现细节。您可以在单独的文件中创建一个新类HugeInterfaceAdapter
,该文件实现接口HugeInterface
的所有方法,如下所示:
public class HugeInterfaceAdapter implements HugeInterface {
public void a() {}
public void b() {}
public void c() {}
public void d() {}
public void e() {}
public void f() {}
}
请注意,您无需为任何方法提供任何实际的实现代码。现在是有趣的部分。是的,你的课程首先需要实现一个巨大的界面。
public class MyClass {
HugeInterfaceAdapter mySmallInterface = new HugeInterfaceAdapter() {
@Override
public void c() {
//Your class-specific interface implementation code here.
}
};
}
现在,您可以在期望mySmallInterface
的所有地方使用引用变量HugeInterface
。这可能看起来有点像hackish,但我可以说它是由Java正式认可的,像MouseAdapter这样的类证明了这一事实。
答案 4 :(得分:1)
这是不可能的。
您可以实现所有四种方法,但是您不需要的两种方法应该抛出UnsupportedOperationException
。
答案 5 :(得分:0)
如果你想要一个实现这个接口的具体类,那么就不可能有未实现的方法,但如果你有实现这个接口的抽象类,那么你可以保留任意数量的方法,因为你想要实现它们。
答案 6 :(得分:0)
正如其他答案所提到的,你不能拥有一个具体的类,只实现它实现的接口的一些方法。如果您无法控制类扩展的接口,您可以考虑使用Adapter类。 抽象Adapter类可以为接口的方法提供虚拟实现,客户端类可以 扩展Adapter类。 (当然缺点是你不能扩展多个类)
这是使用事件监听器类的GUI编程(使用Swing)的常见做法
可能对实现EventListener接口指定的所有方法不感兴趣。例如
看一下java.awt.event.MouseListener
接口和相应的适配器类java.awt.event.MouseAdapter
。