2012-01-13 46 views
0

給定幾個類/接口。如何獲得給定方法的實現類?

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)" 
} 

如何使用實施C(或C中的任何亞類)我可確定碼(編程),該B爲實施INT doSomething的(INT)的類。如果使用E(擴展D,是的......這是一個大類的家族),如何處理B的子類(讓我們說擴展C的D)overrid「int doSomething(int)我定義了實現「int doSomething(int)」的第一個父代?

謝謝大家提前:)

+3

不應該B實現A? – stacker 2012-01-13 15:43:56

+1

爲什麼你需要知道這個?你通常不應該關心這個。如果同時有A的實例,則知道可能會調用doSomething。這就是多態的完整點。無論如何,我認爲這是你要找的東西:http://docs.oracle.com/javase/6/docs/api/java/lang/reflect/Method.html#getDeclaringClass%28%29 – 2012-01-13 15:44:18

+0

你的意思是像做'System.out.println(getClass()。getName());'方法內? – Viruzzo 2012-01-13 15:45:41

回答

3

你可以做,使用反射,即開始在對象具有類,檢查類是否定義了由方法名和參數類型標識的方法。如果這個類沒有定義這個方法,你會得到它的超類並檢查它,直到你點擊Object,在這種情況下,這個方法根本不可用。

對於公共方法,它更容易,因爲Java有這已經是一個內置的方法:

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

請注意,這只是對公共方法的作品,否則,你就必須向上搜索類層次自己(在這種情況下使用getDeclaredMethod(...))。

+0

這就是我們最終做的(或多或少),但謝謝:) – Ar3s 2012-02-20 10:54:08

相關問題