2013-12-12 3 views
2

다음과 같이 다른 패키지에 두 개의 클래스가 있습니다. 패키지 라이브러리의 기본 클래스입니다.슈퍼 클래스의 보호 된 변수가 다른 패키지의 하위 클래스에서 보이지 않음

package library; 

public class Book{ 

    public int varPublic; 
    protected int varProtected; 
    private int varPrivate; 
    int varDefault; 
} 

이며 패키지 건물의 하위 클래스입니다.

package building; 

import library.Book; 

public class StoryBook extends Book { 


    public static void main(String[] args) { 
     // TODO Auto-generated method stub 
     Book book = new Book(); 
     book.varPublic = 10; 
     book.varProtected = 11; 


    } 

} 

나의 이해는 변수 "var.Protected는"클래스 이야기 책에서 볼 수 있어야하지만 난이 오류가 발생하고 있다는 점이다. 이클립스와 명령 프롬프트에서이 코드를 실행하려고했습니다.

사람은 자신의 상속 protected 멤버에 액세스 만 할 수있는 선언 클래스의 서브 클래스 인 다른 패키지에서이

+0

this.varProtected = 11이 문서에서했다 걸릴;//이 잘 작동 할 것입니다 ... – Ashish

+0

문제는 동일하지만 두 코드가 다릅니다. 다른 게시물에서 그는이 키워드를 사용하여 생성자 내에서 보호 된 변수를 지정합니다. 하지만 개체에 대한 참조와 함께 직접 보호 된 변수에 액세스하려고합니다. 나는 자바 프로그래밍의 초보자이며이 코드는 내가 작성한 코드가 자바 튜토리얼에 설명 된 것을 수행하지 않는다. – user3000126

답변

2

클래스로 찾아보세요 수 있습니다.

public class StoryBook extends Book { 
    public StoryBook() { 
     System.out.println(this.variable); // this.variable is visible 
    } 
} 

... 그러나 다른 객체의 상속 된 protected 회원은 아닙니다. 또한

public class StoryBook extends Book { 
    public StoryBook() { 
     System.out.println(this.variable); // this.variable is visible 
    } 

    public boolean equals(StoryBook other) { 
     return this.variable == other.variable; // error: StoryBook.variable is not visible 
    } 
} 

A가

Why a protected member of a superclass can't be accessed from a subclass by using a superclass' reference?

관련 문제