的接口方法
我在这种情况下有一个疑问定制的实现,我已经张贴在这里的一些示例代码....的接口方法
public interface a{
public void m1();
public void m2();
public void m3();
.
.
.
public void m100();
}
public class A implements a{
public void m3(){
// implementation code
}
// Here i need to implement only m3() method but not all 100 methods
//basically i have to implement all the other 99 methods
// but here i don't want to either implement or provide skeleton declarations for all
//remaining.... what should i do for compiling this ????
}
谁能帮助呢?
我会建议制作一个名为AbstractA
的抽象类,它实现了接口A
,但它的所有方法都有null实现。然后让每个实施类extend AbstractA
。
此外,我想知道为什么你有一个单一的接口与所有这些方法时,他们不是全部由每个实现接口类实现。你几乎肯定会遇到核心设计问题。
你可以元代码,编写一个程序来写出99个引发NotImplementedException的方法。或者,你可以使一个类而不是一个接口(或许是抽象的)并扩展它,只实现你需要的东西。缺点是你的类不能扩展任何其他类,因为Java不支持多继承。
这种类型的问题的常见方法是创建实现接口的基类,并为所有方法提供STUB实现。
你可以看到这个曾经在Swing例如AbstractAction
类或类是微不足道的实施Action
接口或MouseListener
接口设计,使其更容易实现的。要在您的情况下做到这一点,你可以提供一个类AbstractA
public abstract class AbstractA implmements a
{
public void m1() {}
public void m2() {}
///... and so on
}
那么你会创建实际的类
public class A extends AbstractA
{
public void m3()
{
//your implmentation
}
}
除非你实现在A级或A的一些超全100层的方法,或至少将它们作为抽象方法存储,A不实现接口a。
如果你真的想把每个方法的逻辑分开,这样你就不必在一个类中实现100个方法(这将是丑陋的),请考虑策略模式。
M是定义一个方法的接口:
public interface M {
public void go();
}
M的每一个实现实现的米方法之一的逻辑:
public class M1 implements M {
public void go() {
//logic for m1
}
}
public class M2 implements M {
public void go() {
//logic for m2
}
}
等。
现在,您的A类指的是100 M个对象,每个方法只需在其中一个对象上调用go()。您可以分别实现和测试每个逻辑。
public class A implement a {
M[] ms = {
new M1(),
new M2(),
new M3(),
... ,
new M100()};
private do(int index) {
ms[index].go();
}
public m1 {
do(0);
}
public m2 {
do(1);
}
public m3 {
do(2);
}
...
public m100 {
do(99);
}
}
您可以使用代理。
MyInterface instance = Proxy.newProxyInstance(MyInterface.class.getClassLoader(), MyInterface.class, new InvocationHandler(){
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable{
if(!method.getName().equals("methodICareAbout")) {
throw new UnsupportedOperationException();
}
//Implement your method here
}
});
声明:我决不会建议实际使用这样的解决方案在我的项目之一,但它允许你实现一个方法,而不处理所有其他人。
国际海事组织有一个接口,其上只有100个方法你只想实现一个是主要的代码气味,表明你应该重新考虑你的设计。但是,如果你的双手绑在一起,你别无选择,只能使用现有的界面,这个解决方案将起作用。
这正是MouseAdapter,WindowAdapter等为Swing中相应的MouseListener,WindowListener接口所做的事情。 – Rhangaun 2010-05-27 18:17:09
我在一次采访中遇到了这个问题...... – Renuka 2010-05-27 18:19:51
@Renuka面试官想知道,如果你理解了界面和抽象类的区别,以及如何一起使用它们。 – zengr 2010-05-27 18:44:08