0

这是我一段时间以来一直在挠头的一个。

假设您想在接口中指定一个方法,但您不希望在实现级别之前实际定义它。也就是说,你想在接口中指定一个方法,这样如果它是在抽象类中定义的,编译器就会抛出错误。

public interface Thing{   

    public void method1();

    public void method2();

    //method3 should be implementation specific
    public void method3();

}

然后我有一个抽象类:

public abstract class BasicThing{

    @Override
    public void method1(){}

    @Override
    public void method2(){}

}

我的实现特定代码:

public class ThingImpl{

    @Override
    public void method3(){}

}

(顺便说一句,我知道以这种方式编写它是有效的,但我想要这样做的原因是,如果我正在编写接口并将其传递给其他人,然后将其传递给其他人去做最终的实现,我希望能够对它们强制执行额外的规范)

4

3 回答 3

4

不,在编译时没有办法做到这一点。IMO,这也是一个非常奇怪的要求。

正如Sheik的回答所示,您当然可以通过抽象类的合作来做到这一点。但是您不能通过在接口中放置特定的东西来强制抽象类这样做。

您可能会尝试查找所有相关类并在单元测试中验证您的需求。

于 2012-07-25T10:17:41.583 回答
1

您应该在抽象 BasicThing 类中使用抽象方法。

public abstract void method3();
于 2012-07-25T10:17:18.687 回答
0
I think what u need is an anonymous inner-class implementations for your interface.

public class MyClass{

public void do something()
{
    Thing th1=new Thing(){

     @Override
     public void method3(){
     System.out.println("****My Method3***");
     }
    };

    th1.method3();
}
};
于 2012-07-25T11:41:56.370 回答