2011-03-15 5 views
9

추상 클래스를 작성한 다음 추상 클래스에 클래스를 중첩하면 추상 클래스의 하위 클래스에있는 메소드에 액세스 할 수 있습니까? 대답을 어디에서나 찾을 수 없습니다 ..중첩 클래스가있는 추상 클래스가 가능합니까?

+0

:-) 쉽게 자신이 밖으로 시도 수 있 었는가? 클래스 A가 추상 클래스라는 것을 확신하지 못한다면, 클래스 B는 A의 내부 클래스이고 (A는 정적입니까?), 클래스 C는 A를 A 외부로 확장합니까? 또는 B를 확장합니까? 제발 좀 더 구체적으로 말하십시오. –

답변

9

물론 내부 클래스의 액세스 한정자는 필드 및 메서드와 동일한 규칙을 따릅니다. 중첩 된 클래스가 public, protected이거나 하위 클래스가 동일한 패키지에 있고 내부 클래스가 패키지 개인 (기본 액세스 한정자) 인 경우 클래스가 추상 클래스인지 또는 구체적 클래스 이건 관계가 없습니다. 서브 클래스는 그것. 중첩 된 클래스는 적어도 보호 된 경우 (방법은 공공 또는 우리는 같은 패키지에 그들이 개인없는만큼)

public abstract class AbstractTest { 

    // all subclasses have access to these classes 
    public class PublicInner {} 
    protected class ProtectedInner {} 

    // subclasses in the same package have access to this class 
    class PackagePrivateInner {} 

    // subclasses do not have access to this class 
    private class PrivateClass {} 

} 
+0

완벽하고 우수한 설명. – providence

0

, 우리는 그 방법에 액세스 할 수 있습니다.

그러나 당신은 당신이 구조 예제를 제공 할 수

1
class Abstract { 
    modifier1 class Nested { modifier2 int i = 0; } 
    Abstract() { 
     Nested n = new Nested(); 
     n.i = 1; 
    } 
} 

class Sub extends Abstract { 
    Sub() { 
     Nested n = new Nested(); 
     // have access as long you not choose "private" 
     // for `modifier1` or `modifier2`: 
     n.i = 5; 
    } 
} 
관련 문제