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。

もちろん、シェイクの答えが示すように、抽象クラスの協力でそれを行うことができます。しかし、インターフェイスに特定のものを配置することによって、抽象クラスにそれを強制することはできません。

関連するすべてのクラスを見つけて、単体テストで要件を検証しようとする可能性があります。

于 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 に答える