2012-01-13 2 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)" 
} 

I 결정할 수도 구현 C (또는 C 중 어느 서브 클래스)를 사용하여 코드 (프로그램 방식)이 B는 INT 해봐요 (int)를 구현하는 클래스가 얼마나.

또는 B의 하위 클래스 중 하나라도 C를 확장하는 D가 "int doSomething (int)"을 재정의하면 E를 사용하여 작업 할 때 (D를 확장하는 경우 ... 이것은 하나의 큰 클래스 패밀리입니다) 나는 "int doSomething (int)"을 구현 한 첫 번째 부모를 정의합니까?

사전에 여러분 모두 감사합니다 :)

+3

B가 A를 구현해서는 안됩니까? – stacker

+1

왜 이것을 알아야합니까? 당신은 보통 이것을 신경 쓰지 않아야합니다. yoy가 A의 인스턴스를 가지고 있다면, do something 뭔가가 호출 될 수 있습니다. 그것이 다형성의 핵심입니다. 어쨌든,이게 당신이 찾고있는 것 같아요. 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(); 

주 공공 방법이 유일한 작품, 그렇지 않으면 당신은 클래스 계층 구조 자신을 검색 할 거라고 : 자바이 이미 내장 방법이 있기 때문에 공공 방법에 대한

, 그것은 쉽게 이 경우 getDeclaredMethod(...)을 사용하십시오.

+0

그게 우리가 (더 많거나 적은) 일을 끝내지만 감사합니다 :) – Ar3s