2014-10-13 2 views
0

다른 프로젝트 ("com.services")와 같은 이름의 에 다른 클래스를 확장하는 클래스 java ProductManager가 있습니다.그녀의 저녁 클래스에서 구현되는 클래스의 메소드 호출

수퍼 클래스에있는 deleteProduct (Long productId) 메소드를 호출해야합니다.

try{ 
    Object service = CONTEXT.getBean("ProductManager"); 
    Method method = service.getClass().getDeclaredMethod("deleteProduct", Long.class); 
    method.invoke(service, productId); 
} catch(Exception e){ 
    log.info(e.getMessage()); 
} 
나는 제품 삭제할 수 없습니다

: 당신이 그 방법을 무시하는 경우

+0

공개하려고하는 방법입니까? 이 메서드는 클래스에서 재정의됩니까? – Pshemo

+0

예, 공개되었지만 클래스에서 재정의되지 않았습니다. – junior

답변

1

다양한 getDeclaredMethod()getDeclaredMethods()은 현재 클래스 인스턴스에서 선언 된 메서드 만 반환합니다. javadoc에서 :

여기에는 public, protected, default (패키지) 액세스 및 개인 메소드가 포함되지만 상속 된 메소드는 제외됩니다. 여기

중요한 부분은 "만 제외는 방법을 상속"입니다. 이것이 현재 코드로 예외를 얻는 이유이며, 부모 클래스에서 deleteProduct() 메서드를 반환하지 않습니다.

당신은이 모든 public 메소드를 반환대로 getMethod 방법을 사용할 필요가 반사를 계속 사용하고 싶어 대신하는 경우 "클래스 또는 인터페이스와 슈퍼 클래스와 슈퍼을 상속하는 선언을 포함 을."

0

com.franceFactory.services.ProductManager.deleteProduct(java.lang.Long) 

이 제품은 삭제되지 않습니다 :(단지를 사용 내가이 정보를 얻을를 예약어 super (오라클 문서에서) :

public class Superclass { 

    public void printMethod() { 
     System.out.println("Printed in Superclass."); 
    } 
} 

public class Subclass extends Superclass { 

    // overrides printMethod in Superclass 
    public void printMethod() { 
     super.printMethod(); // This calls to the method defined in the superclass 
     System.out.println("Printed in Subclass"); 
    } 
    public static void main(String[] args) { 
     Subclass s = new Subclass(); 
     s.printMethod();  
    } 
} 

티 s 코드는 다음과 같이 작성합니다 :

Printed in Superclass.

가 (당신은 단지 그것을 사용하여, 그것을 무시하지 않는) 다른 경우 서브 클래스

에서 인쇄, 단지 this.methodName(...) 물품. 상속 된 모든 메소드는 직접 사용할 수 있습니다.

0

면책 조항 : 귀하의 질문에 대한 완전히 이해가 확실하지 않습니다. 나는 아직도 내가 이해한다고 생각하는 것에 대답하려고 노력할 것이다.

패키지 com.franceFactory.servicesProduct

는 패키지 com.services에서 Product 클래스를 확장되도록는 B.가

B는 방법을 deleteProduct(java.lang.Long)

을했다 연장

(B을 호출하자) (A을 호출하자) A가 방법을 무시합니다. deleteProduct(java.lang.Long)

Y 클래스 A의 인스턴스가 있습니다. 따라서 오브젝트 A의 OOPS 개념 메소드 이 호출됩니다.

슈퍼의 메소드가 호출지고 당신은 클래스 B의 인스턴스

편집

작전을하지 않는 한 명확한 설명 yes, it's public, but it isn't overridden in my class

을 외부에서 슈퍼 메소드를 호출 할 수있는 방법이 없습니다 이리. 메소드에 기록 된 내용에 따라 제품이 삭제되지 않습니다.

1

당신이 (그 이름이 제안으로)가 는 현재 클래스에 선언 된 메소드 만 반환 할 수 있기 때문에 당신이 다른 클래스에 선언 된 메소드를 호출 할 주장하면서, 다음 getDeclaredMethod()를 사용하지 않는 반사를 사용해야하는 경우 (할 수 정확한 수퍼 클래스 선언).

공용 메서드 (상속 된 메서드 포함)를 가져 오려면 getMethod()을 사용하십시오.

+0

ok thanks, 시도해 보겠습니다. :) – junior

관련 문제