2014-04-16 1 views
1

내 자바 책은 다음과 같은 연습 질문이 있습니다재정 개인 방법

public class Person(){...} 

public class Teacher extends Person{...} 

을 그리고는 다음 진정한 문의하는 요청 :

1 : 교사가 Person의 생성자를 상속합니다.

2 : 교사는 새로운 방법과 개인 인스턴스 변수를 추가 할 수 있습니다.

3 : 교사는 Person의 기존 개인 방법을 무시할 수 있습니다.

이 책에서는 2와 3이 사실이라고 말합니다. 나는 단지 2가 사실이라고 말했다.

나는 서브 클래스가 실제로 private 메소드와 멤버 필드를 상속 받았지만 직접 액세스 할 수 없다는 것을 읽었습니다. 그래서 내 질문은 직접 액세스 할 수없는 경우 기존 개인 메서드를 재정의하는 방법은 무엇입니까? 그리고 왜 사람들이 사적인 목적을 위해 사적으로 만든다면 아마도 개인적인 방법을 무시하고 싶을까요?

+0

어떤 도서인가요? – Scott

+0

@Scott Barron의 AP 컴퓨터 과학 A 6th Edition –

+0

그들은 보호를 의미 할 수도 있었습니까? 아니면 단지 실수 일뿐입니다. 많은 정보가있을 때 몇 가지 실수가 발생합니다. – immibis

답변

4

3 : 교사는 Person의 기존 개인 메서드를 재정의 할 수 있습니다.

아니에요.

수퍼 클래스의 개인 메서드/필드는 하위 클래스에 표시되거나 상속되지 않습니다. 그래서, 당신은 그들을 무시할 수 없습니다.

+0

흠 AP CCS 책이 잘못 되었나요? –

+2

매우 그렇습니다. 이 예제를 입력하고 컴파일하려고하면 어떻게되는지보십시오. – csmckelvey

+0

@SimionMita 내 게시물을 보아라. 나는 책이 잘못되었다고 생각하지 않을 것이다. 아마도 단어의 틀린 선택 일 뿐이다. – mel3kings

1

방법은 그들이 public 또는 protected을하거나 접근 수정이없는 경우에만 상속됩니다 예를 들어 그것을보십시오. private은 상속 될 수 없습니다. 나는 책이 Teacher이라는 것을 의미하는 것이 교사가 메서드를 보지 못하기 때문에 더 넓거나 비슷한 접근 수정자를 사용하여 유사한 메서드 이름을 만들어서 Person의 private 메서드를 '재정의 할'수 있다고 생각합니다. 이를 메소드 음영이라고합니다. 이 책은 그림자 대신 겹쳐 쓰기를 사용하여 잘못된 단어를 선택하거나 잘못된 대답을 제공합니다.

예 :

public class Person(){ 
    private void sayHello(){...}  
} 

public class Teacher extends Person{ 
    public void sayHello(){...} 
} 
+5

이것이 정말로 무시 될지는 모르겠다. 그럴 거니? –

+2

이것은 무시하지 않습니다. –

+1

아니요,이 방법은 그림자입니다. 책이 그림자 대신 겹쳐 쓰기를 사용하여 잘못된 단어를 선택하거나 잘못된 대답을 제공했습니다. – mel3kings

0

다른 사람이 말했듯이, 서브 클래스는 상속 클래스의 private 메소드를 재정의 할 수 없습니다. 이것은 특히 protected 키워드의 목적입니다. 다른 객체에 대해 private이지만 서브 클래스에서 여전히 액세스 할 수있는 함수 및 데이터 멤버입니다. 개인 함수가 하위 클래스에 의해 액세스 될 수 있으면 보호 된 키워드에 대한 목적이 없습니다.

1

JLS §8.2 개인을 선언하는 클래스의

회원은 해당 클래스의 서브 클래스에 의해 상속되지 않습니다.