2014-11-02 2 views
0

보호 된 액세스 수정 자의 경우, 연관된 메소드 또는 속성이 해당 서브 클래스에서 볼 수 있어야합니다. 그것은 정의에 따른 것입니다.보호 된 메소드에 대한 액세스 수정 자

하지만 여기서 설명 할 수없는 한 가지가 있습니다. 기본 클래스 : 예를 들어, 우리는 아래의 코드를

package com.set.test; 

public class ModifierBase { 
    private int privateInt; 
    int friendlyInt; 
    protected int protectedInt; 
    public int publicInt; 

    private void displayPrivate(){ 
     System.out.println("displayPrivate"); 
    } 
    void displayFriendly(){ 
     System.out.println("displayFriendly"); 
    } 
    protected void displaoyProtected(){ 
     System.out.println("displaoyProtected"); 
    } 
    public void displayPublic(){ 
     System.out.println("displayPublic"); 
    } 
} 

을 그리고 클래스는 다른 패키지에서이 일을 확장합니다.

package com.another; 

import com.set.test.ModifierBase; 
public class ModifierSubPackgeExtend extends ModifierBase{ 
    public static void main(String[] args) { 
     ModifierSubPackgeExtend m = new ModifierSubPackgeExtend(); 
     ModifierBase mb = new ModifierSubPackgeExtend(); 
    } 
} 

m은 보호 된 사람과 공개 된 사람 모두에 액세스 할 수 있습니다. 그러나 mb는 보호 된 메서드 또는 변수에 액세스 할 수 없습니다.

왜 그렇습니까?

그러나 친화적 갖는 같은 예를 들어 :

package com.set.test; 
public class ModifierExtend extends ModifierBase { 
    public static void main(String[] args) { 
     ModifierExtend m = new ModifierExtend(); 
     ModifierBase mb = new ModifierExtend(); 
    } 
} 

모두 m와 MB는 친절한 수정에 액세스 할 수 있습니다.

m.friendlyInt 
mb.friendlyInt 

두 가지 모두 괜찮습니다.

기본 클래스로 선언하고 하위 클래스로 초기화 할 때 보호 된 vs 선언에 대한 다른 액세스 권한을 갖고 하위 클래스로 초기화하는 이유는 무엇입니까?

+0

정확히 달성하려는 것은 무엇입니까? 또한 java에는'friendly' 수정자가 없습니다. 패키지 레벨 권한입니다. –

+0

나는 키워드로서 친숙한 리터럴이 없다. 나는 왜 기본 클래스가 하위 클래스로 선언하는 다른 액세스 수준을 비교하는지 선언하는 이유를 묻고 있습니다. 왜 행동이 친절한 접근과 비교되지 않는 이유. –

+0

친절한 액세스 권한은없고 패키지 수준 액세스 만 가능합니다. 그리고 그들은 다른 패키지에 있습니다. –

답변

0

현재 클래스, 패키지 및 하위 패키지에 대해 보호 된 클래스, 함수 등을 볼 수 있습니다. 또한 클래스의 하위 클래스에서도 볼 수 있습니다.

공개 변수 - 모든 클래스에 표시됩니다.

보호 된 변수 - 자신이 속한 클래스와 하위 클래스에서만 볼 수 있습니다.

친숙한 변수 - 기본 수식자가 필요합니다. 패키지에 표시됩니다.

개인 변수 - 자신이 속한 클래스에만 표시됩니다. http://docs.oracle.com/javase/tutorial/java/javaOO/accesscontrol.html

0

보호 된 멤버 변수가 수퍼 클래스에 선언되어 있지만 동일한 인스턴스에서 액세스되지 않은 : 당신이이 문서를 읽을 수 있습니다 자세한 내용은

.

이 경우 액세스 할 수 없으며 보호 된 비 정적 변수는 동일한 인스턴스와 관련된 경우에만 서브 클래스에서 액세스 할 수 있습니다.

관련 문제