2012-01-13 6 views
0

いくつかのクラス/インタフェースが指定されています。メソッドの実装クラスを取得するにはどうすればよいですか?

コードで実装C(またはCの任意のサブクラス)を使用してどのように
public interface A { 
    public int doSomthing(int x); 
} 

public class B implements A { 
    int doSomthing(int x){ 
     //actually do something 
    }; 
} 

public class C extends B { 
    //does some specific implementations of what B does 
    // but does NOT override "int doSomething(int)" 
} 

I BがINTのdoSomething(int)を実装するクラスであったこと(プログラム的に)決定することができます。

Bのサブクラス(Cを拡張するDと言うことができます)が "int doSomething(int)"をオーバーライドした場合、Eを使って作業するとき(Dを拡張する、これはクラスの大きなファミリーです)私は "int doSomething(int)"を実装した最初の親を定義しますか?

は、事前にすべてのいただきありがとうございます:)

+3

BはAを実装すべきですか? – stacker

+1

なぜこれを知る必要がありますか?あなたは通常このことに気を付けるべきではありません。 yoyがAのインスタンスを持つ場合、doSomethingが呼び出されることがあります。それが多形性の全体のポイントです。とにかく、これはあなたが探しているものだと思う:http://docs.oracle.com/javase/6/docs/api/java/lang/reflect/Method.html#getDeclaringClass%28%29 –

+0

あなたは何かを意味する'System.out.println(getClass()。getName());'メソッド内部で? – Viruzzo

答えて

3

あなたが行うことができます反射、すなわち、あなたは、オブジェクトが持つクラスで開始し、そのクラスは、methodNameの、パラメータタイプで識別されるメソッドを定義するかどうかを確認を使用して。クラスがそのメソッドを定義していない場合は、Objectに達するまで、そのスーパークラスを取得してチェックします。この場合、メソッドはまったく使用できません。

Class<?> mostSpecificImplementor = 
    yourObject.getClass().getMethod("doSomthing", int.class).getDeclaringClass(); 

注パブリックメソッドについては、この唯一の作品は、そうでなければ、クラス階層自分自身を検索する必要があるだろうということ:Javaは、このため、すでに組み込みメソッドを持っているので、公開方法については

は、それは簡単です(この場合はgetDeclaredMethod(...)を使用してください)。

+0

それは(多かれ少なかれ)やってしまったのですが、感謝します:) – Ar3s

関連する問題