2017-12-25 78 views
1

을 감안할 때 :Subclass 생성자가 Superclass 생성자로부터 변수를 상속합니까?

public class Counter { 

    private int count; 

    public Counter() { 
     count = 5; 
    } 

    public void increment() { 
     count++; 
    } 

    public void reset() { 
     count = 0; 
    } 

    public int value() { 
    return count; 
    } 
} 

내가 (이 암시 적으로 생성되지 않음) 정의 함수와 서브 클래스가있는 경우, 서브 클래스의 생성자는 슈퍼 클래스 생성자에서 변수 인스턴스 count을 상속 무엇입니까? private count과 관련하여 약간 혼란 스럽기 때문에 나는 이것을 묻습니다.

public class ModNCounter extends Counter { 

    int modCount; 

    public ModNCounter(int n) { 
    modCount = n; 
    } 

    @Override 
    public int value() { 
    return super.value() % modCount; 
    } 

    public static void main(String[] args) { 
    ModNCounter modCounter = new ModNCounter(3); 
    System.out.println(modCounter.value()); //prints out 5 % 3 = 2 
    modCounter.increment(); // count = 6 
    System.out.println(modCounter.value()); //prints out 6 % 3 = 0 
    modCounter.reset(); // count = 0 
    modCounter.increment(); // count = 1 
    System.out.println(modCounter.value()); //print 1 % 3 = 1 
    } 
} 

객체 modCountercount 변수가 있습니까? 그렇지 않다면, modCounter.increment()은 에러를 제공하지 않나요?

+0

예 아니요. 'count '가 있지만 개인적인 것이기 때문에 직접 액세스 할 수는 없습니다. 공개적으로 선언 된 메소드에 액세스 할 수 있습니다. 이것은 꽤 표준 클래스 상속입니다. – markspace

+1

자습서에 따르면 'private'멤버 (필드 및 메서드)는 하위 클래스에 상속되지 않는다고합니다. 그들은 "거기"에 있지만 서브 클래스는 그것들에 접근 할 수 없기 때문에 거기 있지 않습니다. https://docs.oracle.com/javase/tutorial/java/IandI/subclasses.html – markspace

답변

2

상속 된 클래스는 수퍼 클래스의 모든 멤버를 갖지만 직접 액세스 할 수는 없습니다 (private 인 경우). 이 경우 - 예, ModNCount의 인스턴스는 count입니다. 비공개이기 때문에 액세스 할 수 없지만 지금까지 보았 듯이 incrementreset 메소드를 사용하여 값에 영향을 줄 수 있습니다.