回答
您可以制作实施类abstract
并从界面实施4种方法中的两种。
添加一些关于抽象类的细节 – 2010-02-19 07:45:01
对不起,我的评论上面:它缺少“添加”后的字符“ed”。对不起(我现在在评论的编辑窗口之外)。 – 2010-02-19 07:52:03
这是不可能的。
你可以实现所有四种方法,但你不需要的两个应该抛出一个UnsupportedOperationException
。
......这引发了他所实施的课程是否真正实现了界面的问题。 – 2010-02-19 07:45:40
如果您控制界面的设计,只需将其分成两部分即可。一个接口指定只有一些实现实现,另一个接口指定另外两个(或继承前两个并添加更多,您的选择)
如果您想要一个实现此接口的具体类,那么它不是可能有未实现的方法,但如果你让抽象类实现这个接口,那么你可以留下任何数量的方法,因为你想实现。
如果不声明实现类抽象,则不能“部分”实现接口,因此需要某个子类提供剩余的实现。原因是一个接口是一个契约,并且实现它声明“我提供了由接口指定的行为”。其他一些代码将通过声明的接口使用你的类,并期望方法在那里。
如果您知道用例不使用其他两种方法,您可以通过抛出OperationNotSupported来实现它们。这是否有效取决于界面和用户。如果接口可以通过这种方式合法地部分实现,那么接口设计得不好就会产生代码味道,也许应该是两个接口。
您也可以通过不做任何事情来“实现”接口,尽管这通常只适用于“侦听器”或“回调”实现。
总之,这一切都取决于。
其他答案提到你不能有一个具体的类只实现它实现的接口的一些方法。如果您无法控制类正在扩展的接口,则可以考虑使用Adapter类。 抽象的Adapter类可以为接口的方法提供虚拟实现,并且客户端类可以扩展Adapter类的 。 (当然缺点是你不能扩展超过一个类)
这是GUI编程(使用Swing)的常见做法,其中事件监听器类 可能对实现由EventListener接口指定的所有方法不感兴趣。例如 看看java.awt.event.MouseListener
接口和相应的适配器类java.awt.event.MouseAdapter
。
嗨,如果“事件监听器类可能没有兴趣实现EventListener接口指定的所有方法”,为什么不会只为这些方法抛出异常? – ransh 2015-04-28 14:30:35
我认为@sateesh的答案是接近解决您的问题的答案。让我详细说明一下。首先,任何实现接口的类都必须提供其方法的定义,即全部。但在某些情况下,用户可能会发现除了一两个接口外,大部分方法都没有用处。考虑具有6种抽象方法如下界面:
public interface HugeInterface {
void a();
void b();
void c();
void d();
void e();
void f();
}
假设你的代码只查找使用的方法“C()”,你希望只方法提供实施细节“C()”。您可以在其中实现如下所示一样的界面HugeInterface
的所有方法单独的文件中创建一个新的类HugeInterfaceAdapter
:
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.
}
};
}
现在你可以在一个HugeInterface
预计所有地方使用的参考变量mySmallInterface
。这可能看起来有点骇人听闻,但我可以说它是由Java正式认可的,像MouseAdapter这样的类承认了这个事实。
- 1. 困惑接口和实现
- 2. C#:关于接口,实现和继承的困惑
- 3. 关于IEnumerator接口的困惑
- 4. 关于接口和线程的困惑
- 5. 关于Keyevents GetKeyText方法的困惑
- 6. 关于java分配方法的困惑
- 7. 关于解析方法的困惑
- 8. 关于ColdFusion中的类,实例和方法的困惑
- 9. 困惑JAVA接口
- 10. 困惑于“respond_to?”方法
- 11. Task.Factory.StartNew - 关于池的困惑
- 12. 关于MutationObserver的困惑
- 13. 关于objc_getClass的困惑
- 14. 关于DBus的困惑
- 15. 关于AverageTimer32 PerformanceCounter的困惑
- 16. 关于Thread.Join的困惑
- 17. 关于MusicService的困惑
- 18. 关于结构的困惑
- 19. 关于memset的困惑
- 20. 关于FTP的困惑
- 21. 关于Access Specifier的困惑
- 22. 关于线程的困惑
- 23. 关于Kleene星的困惑
- 24. 关于PhoneGap/Cordova的困惑
- 25. 关于MKOverlayView的困惑
- 26. 关于[NSDate date]的困惑
- 27. 关于流的困惑
- 28. 关于GAC的困惑
- 29. 关于CTE的困惑
- 30. 关于URLMapping的困惑
根据您的问题标题,您看起来是一个非常困惑的人;) – Bozho 2010-02-19 07:45:19