2012-06-12 3 views
2

내 질문은 아버지 클래스에 의해 확장되는 자식 클래스가 있고 할아버지 클래스에 의해 확장되는 경우 자식 클래스가 할아버지의 메서드에 직접 액세스 할 수있는 방법입니다.이미 수퍼 클래스의 하위 클래스가있는 경우 수퍼 클래스 메서드를 어떻게 호출합니까?

+0

자식 클래스가 해당 메서드를 호출하는 방법과 동일 –

+1

이 질문은 관련이 있습니다. http://stackoverflow.com/questions/586363/why-is-super-super-method-not-allowed-in-java – DRCB

+1

너는하지 말아야한다. 캡슐화가 중단됩니다. 부모 클래스가 자식이 조부모 클래스에 액세스하지 못하게하려면 부모 클래스의 계약의 일부입니다. – Pablo

답변

1

할아버지의 시야에 따라 다릅니다. 일반적으로 그것은 단지 아버지의 방법으로 접근 할 수 있습니다. 할아버지 방법의 부모 무시를 건너 뛰려면 부모를 수정하지 않고는 할 수 없습니다.

같은 것 할아버지의 메소드를 호출 할 수있는 유일한 방법 :

public class GF { 
    public void m() { 
     //do something 
    } 
} 

public class F { 

    public void m() { 
     //do something that you don't need in son 
    } 

    /* add this method for the clean access to GF*/ 
    public void gfM() { 
     super.m(); 
    } 
} 

public class S { 
    public void aMethod() { 
     gfM(); //actually calls the GF.m() method 
    } 
} 
+0

가시성은 공개이지만 수퍼 클래스 메서드를 사용할 때는 super 키워드를 사용하지만이 경우 할아버지의 메서드에 직접 액세스 할 수 있도록 무엇을 사용할 것입니까? –

6

이 가장 잘 예에 의해 설명된다

public class GF { 
    public void one() { ... } 
    public void two() { ... } 
} 

public class F extends GF { 
    public void two() { ... } 
} 

public class C extends F { 
    public void one() { 
     super.one(); // Calls one in GF 
    } 

    public void two() { 
     super.two(); // Calls two in F 
    } 
} 

하위 클래스 내에서 오버라이드 (override) 메소드를 호출하는 구문 super.method(....). 그러나 첫 번째 단계 재정의 메서드를 호출하기 위해서만이 작업을 수행 할 수 있습니다. 이 메소드 자체가 오버라이드 (override) 인 경우에는 2 레벨 오버라이드를 호출 할 수 없습니다. 예 : C.two()GF.two()에 직접 전화 할 필요가 없습니다. 반영 할 수 없으며 JVM 바이트 코드조차도 허용하지 않습니다.

+0

+1 올바른 답변입니다. – adarshr

+0

F 클래스에서 direclty GF 메소드를 호출하는 방법이있을 수 있습니다. –

+0

@VinitKumarKamboj - yea. C.two()가 F.two()를 호출하는 것과 같은 방식입니다. 나는 그것을 보여주지 않았다 ... 그것은 예제의 요점이 아니기 때문이다. –

관련 문제