내 질문은 아버지 클래스에 의해 확장되는 자식 클래스가 있고 할아버지 클래스에 의해 확장되는 경우 자식 클래스가 할아버지의 메서드에 직접 액세스 할 수있는 방법입니다.이미 수퍼 클래스의 하위 클래스가있는 경우 수퍼 클래스 메서드를 어떻게 호출합니까?
답변
할아버지의 시야에 따라 다릅니다. 일반적으로 그것은 단지 아버지의 방법으로 접근 할 수 있습니다. 할아버지 방법의 부모 무시를 건너 뛰려면 부모를 수정하지 않고는 할 수 없습니다.
같은 것 할아버지의 메소드를 호출 할 수있는 유일한 방법 :
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
}
}
가시성은 공개이지만 수퍼 클래스 메서드를 사용할 때는 super 키워드를 사용하지만이 경우 할아버지의 메서드에 직접 액세스 할 수 있도록 무엇을 사용할 것입니까? –
이 가장 잘 예에 의해 설명된다
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 바이트 코드조차도 허용하지 않습니다.
+1 올바른 답변입니다. – adarshr
F 클래스에서 direclty GF 메소드를 호출하는 방법이있을 수 있습니다. –
@VinitKumarKamboj - yea. C.two()가 F.two()를 호출하는 것과 같은 방식입니다. 나는 그것을 보여주지 않았다 ... 그것은 예제의 요점이 아니기 때문이다. –
- 1. 수퍼 클래스의 수퍼 클래스 메소드를 호출합니까?
- 2. 수퍼 클래스 메서드에서 서브 클래스 메서드를 호출합니까?
- 3. 수퍼 클래스의 수퍼 클래스 메서드를 호출하는 메서드를 재정의하는 방법?
- 4. 수퍼 클래스 또는 그냥 setTitle을 사용하여 수퍼 클래스 생성자를 호출합니까?
- 5. 하위 클래스의 수퍼 클래스 속성 설정
- 6. Actionscript : 하위 클래스에서 수퍼 클래스 메서드 호출
- 7. 하위 클래스의 변수를 수퍼 클래스에서 어떻게 변경합니까?
- 8. ObjC에서 하위 클래스의 구현에서 수퍼 클래스의 메서드를 숨기려면 어떻게해야합니까?
- 9. 메서드는 수퍼 클래스 메서드를 오버라이드해야합니다
- 10. 메서드는 수퍼 클래스 메서드를 오버라이드해야합니다.
- 11. 모든 이벤트 클래스의 수퍼 클래스
- 12. arraylist에 수퍼 클래스의 객체?
- 13. Javascript에서 매개 변수가있는 수퍼 클래스의 생성자를 어떻게 호출합니까?
- 14. 수퍼 클래스의 NSNotificationCenter 수신기 메서드를 재정의하는 방법?
- 15. 수퍼 클래스의 @PostLoad
- 16. 수퍼 클래스 및 하위 클래스 오류
- 17. 수퍼 클래스에서 하위 클래스 만들기?
- 18. 하위 클래스 - 인수 수퍼 클래스에서
- 19. 수퍼 클래스의 개인 메서드를 하위 클래스에서 재정의 할 수 있습니까?
- 20. 수퍼 클래스 숨기기 방법
- 21. 모든 클래스의 XJC 수퍼 인터페이스 및 수퍼 클래스?
- 22. 수퍼 클래스에서 UIViewController 하위 클래스의 메서드를 처리하는 방법
- 23. actionscript : 수퍼 클래스의 서브 클래스 변수를 변경하십시오.
- 24. 하위 클래스 컨텍스트에서 수퍼 클래스에서 상속 된 메서드를 실행하는 방법?
- 25. Objective-C에 두 개의 수퍼 클래스가있는 클래스를 만들 수 있습니까?
- 26. 수퍼 클래스의 필드 유형을 하위 클래스 (Java)로 설정
- 27. ObjectiveC에서 수퍼 클래스의 메서드를 호출하는 타이밍이 중요합니까?
- 28. flex/as3에서 수퍼 클래스의 수퍼 클래스에 액세스 할 수 있습니까?
- 29. 하위 클래스에 수퍼 클래스의 속성을 전달합니다.
- 30. Python에서 수퍼 클래스의 클래스 메소드 호출하기
자식 클래스가 해당 메서드를 호출하는 방법과 동일 –
이 질문은 관련이 있습니다. http://stackoverflow.com/questions/586363/why-is-super-super-method-not-allowed-in-java – DRCB
너는하지 말아야한다. 캡슐화가 중단됩니다. 부모 클래스가 자식이 조부모 클래스에 액세스하지 못하게하려면 부모 클래스의 계약의 일부입니다. – Pablo