2014-03-30 2 views
0

첫 번째 질문은 코드 안에 있습니다. 두 번째 질문은 정적 메서드를 비 정적 메서드로 재정의 할 수없는 이유는 무엇입니까? 세 번째 이유는 정적 및 추상이 함께 할 수 없기 때문입니다.자바 상속 오해

class A { 
    public void display() { 
     System.out.println("Display of Class A called"); 
    } 
} 

class B extends A { 
    public void display() { 
     System.out.println("Display of Class B called"); 
    } 
} 

class C extends B { 
    public void display() { 
     System.out.println("Display of Class C called"); 
     super.display(); // calls B's Display 
     // Is there a way to call A's display() from here? 
    } 
} 
+0

'정적'의 의미를 생각해보십시오. 특정 인스턴스에만 해당되는 것은 아닙니다. 이제 다형성이 어떻게 작동하는지 생각해보십시오 : 사용 된 구현은 메소드가 호출되는 * 인스턴스 *에 달려 있습니다. 그들이 어떻게 실제로 함께 작동하지 않는지보십시오. 다른 질문에 관해서는, 아닙니다, 당신은 할 수 없습니다. http://stackoverflow.com/questions/586363/을 참조하십시오. –

+0

또한 * 한 번에 * 한 가지 질문 만하십시오. –

답변

3

[B] // [/ B]

아니, 당신은 클래스에서 두 단계를 갈 수 없어 ??? 여기에서 A의 디스플레이를 호출하는 방법이 있나요 계층. A 구현을 호출하는 B에 메소드를 구현하고 호출 할 수 있습니다. static 방법이 무시 될 수없는 이유

static 방법

static 방법은 클래스와 연관된 비합니다. 다형성 (따라서 오버라이드)은 객체에 적용되는 개념이므로 적용되지 않습니다.

은 왜 안 staticabstract은 위의 같은 이유로 함께

갈 수 있습니다. abstract 메서드는 하위 클래스가 상속하므로 하위 클래스에서 구현해야하는 메서드입니다. 하위 클래스는 static 메서드를 상속하지 않으므로 static 메서드는 abstract이 될 수 없습니다.

0

첫 번째 질문 : 아니오,베이스 클래스의 저음 클래스를 직접 호출 할 수 없습니다. 클래스 C의 관점에서는 클래스 B가 저음 클래스이고 클래스 A라는 것을 알지 못하기 때문입니다. C가 아는 전부는 기본 클래스가 있고 B입니다.

두 번째 질문 : 정적 메서드는 전역 메서드를 구성하기위한 단순한 방법입니다. 상속은 없습니다. 이 메소드를 클래스에 넣으면 호출 할 코드를 작성할 때 코드를 찾을 위치를 알 수 있습니다.

세 번째 질문 : abstract는 "이 클래스가 여기에, 할 몇 가지 기본적인 기능이있다 할 것입니다 ,하지만이 완료되지 수 나 상속이 작업 얻을 남아있는 어떤 완료"를 의미한다. 앞에서 언급했듯이 정적 메서드는 "자체적으로 서있는"메서드를 넣는 방법 일뿐 초기화 및 컨텍스트가 필요하지 않습니다. 두 사람은 함께 가지 않습니다.