2012-03-20 2 views
7

하위 클래스 안에 있고 수퍼 클래스의 이름을 찾으려고 할 때 super.getClass()를 시도했지만 그 이름을 반환했습니다. 서브 클래스 만. 왜?하위 클래스의 super.getClass()가 하위 클래스 이름을 반환하는 이유

+0

어쩌면 몇 가지 코드 및 샘플 출력을 추가하려고 할 수 있습니다? – smessing

+0

가능한 [부모 기본 클래스 개체를 얻는 방법 super.getClass()] (http://stackoverflow.com/questions/3294656/how-to-get-the-parent-base-class-object-super- getclass) – assylias

답변

8

getClass().getSuperclass()해야합니다.

+0

http://stackoverflow.com/questions/3294656/how-to-get-the-parent-base-class-object-super-getclass 나쁜 디자인을 제안한이 스레드는 무엇을 추천할까요? 그것을 피하십시오 –

+0

그것은 시나리오에 따라 다릅니다. 가능하다면 당신이 사용하고자하는 것이 무엇인지 모르겠다. – Bozho

+0

가능한 한 내 의견을 피하는 것이 좋습니다. –

4

수퍼 클래스 (또는 수퍼 클래스의 수퍼 클래스 등)에서 메서드를 재정의하는 경우 super.theMethod()은 오버로드 된 메서드 대신 원래 메서드를 호출합니다. 실제 오버라이드가 theMethod이 아닌 경우 super.theMethod()theMethod()과 똑같이 작동합니다. 이 경우

나는 즉 Object 클래스의 getClass 방법이라고 어느 쪽이든, 그래서 super.getClass() 행위 정확히 getClass() 같은, (사실 나는 그것이 마지막이기 때문에, 당신은하지 않았다 알고있다) 당신이 getClass() 오버라이드 (override)하지 않은 가정합니다.

+0

예, 동의합니다.하지만 그런 디자인이 수퍼 클래스 메서드를 호출하지 않는 이유는 무엇입니까? –

+4

@AbhishekChoudhary 맞습니다. 'getClass'를 호출하면,'Object'에 정의 된'getClass' 메소드를 호출하게됩니다. 'Object'는 직접 슈퍼 클래스가 아니더라도 클래스의 수퍼 클래스이므로 슈퍼 클래스의 메소드 버전을 호출합니다. 실제로 수퍼 클래스의 버전이 해당 메소드의 유일한 버전입니다. – sepp2k

0

당신이 파생 클래스의 객체와 슈퍼되지 클래스를 생성하기 때문이다 ..이

this.getClass().getSuperClass(); 
+2

'this.'는 불필요합니다. –

관련 문제