2012-06-25 4 views
1

Children, FatherAncestor의 세 클래스가 있습니다. ChildrenFather 확장하고 Father은 다음과 같은 Ancestor 확장 : 나는 아이들의 시험() 메소드에 조상의 시험() 메소드를 사용할 수있는 방법자바 자식은 조상의 메서드를 실행합니다

public class Ancestor { 
    public void test() { 
    } 
} 

public class Father extends Ancestor { 
    @Override 
    public void test() { 
    } 
} 

public class Children extends Father { 
    @Override 
    public void test() { 
    } 
} 

? 나는 아버지의 시험() 방법을 건너 뛰고 싶다.

답변

1

수 없습니다. Java는 super.super.method()과 같은 일을 할 수 없습니다. 그 이유는 this excellent answer에 개략적으로 설명되어 있지만 결론은 캡슐화에 위배된다는 것입니다.

기능이 정말로 필요하고 이런 식으로하는 것이 의미가있는 경우 super.test() 메서드를 호출하는 Father 클래스에 항상 메서드를 추가 할 수 있지만 일반적으로 이와 같은 작업은 나쁜 습관입니다. 이 실제로 없으면 좋은 추론을 사용하고 코드를 다시 생각해보십시오. 메소드를 this이나 super에서 호출 할 필요는 없습니다.

0

짧은 대답은 할 수 없습니다. 캡슐화에 위배되며 일반적으로 나쁜 습관입니다. 원하는 것을 성취하는 더 좋은 방법은 Ancestor.test()를 추상화하고 Ancestor.baseTest()와 같은 새로운 보호 된 메서드를 만드는 것입니다. 그런 다음 Ancestor.baseTest()를 Father, Child 및 논리에 액세스하려는 다른 하위 클래스에서 호출 할 수 있습니다.

+0

내 유일한 문제는 실제로 대부분의 경우 * 필수적이지 않아야한다는 것입니다. 그러한 솔루션이 완벽하게 유효한 솔루션임을 제안함으로써, 이것이 잘못된 행동이라는 잘못된 인상을 남길 수 있습니다. 정말로, 당신은 이런 것들을 피해야합니다. –

+0

대부분의 경우 필요하지 않아야한다는 데 동의합니다. 그러나이 질문은 권고를하기에 충분한 맥락을주지 못했다. 정말 필요한 경우 IMHO 옵션을 제공하는 것이 좋습니다. –

+0

나는 그것이 사실이라고 생각하지만, 내 대답 *이 옵션을 제공하는 동안, 절대적으로 필요한 경우를 제외하고는 그러한 방법을 사용하지 않으려 고 조심했다. 그냥 말해. –

관련 문제