Java-클래스가 중첩 된 클래스의 개인 필드에 액세스 할 수 있습니까?

스라소니

내가 이해했듯이 개인 필드는 정의 된 클래스에서만 액세스 할 수 있습니다.

기초적인 단일 연결 목록에 대한이 코드가 있습니다.

public class LinkedList {
    private class Node {
        private String data;
        private Node next;

        private Node(String data, Node nextNode) {
            this.data = data;
            this.next = nextNode;
        }
    }
    private Node head;
    public LinkedList(String data) {
        // Create head node, set next node null
        head = new Node(data, null);
    }
    public void add(String data){
        Node currentNode = head;
        while(currentNode.next != null){
            currentNode = currentNode.next;
        }
        currentNode.next = new Node(data, null);
    }
    public void printList(){
        Node currentNode = head;
        System.out.println(currentNode.data);
        while(currentNode.next != null){
            currentNode = currentNode.next;
            System.out.println(currentNode.data);
        }
    }
}

잘 실행되고 작동하는 것처럼 보이지만 LinkedList 클래스의 함수에서 Node 클래스의 '데이터'및 '다음'필드에 액세스 할 수있는 이유를 알아 내려고합니다.

여기에 추가하면 중첩 클래스가 'extends'키워드로 정의 된 하위 클래스와 동일한 것입니까?

도움을 주셔서 감사합니다.

편집 :이 질문에 추가하면 연결된 목록의 다른 구현에서 사람들이 노드와 목록에 대해 두 개의 별도 클래스를 정의하는 것을 봅니다. 노드가 연결된 목록의 중첩 클래스가되는 것이 나에게 더 합리적이었습니다. 이것이 완전히 정확하지 않다면 알려주세요 ...

Sotirios Delimanolis

하지만 LinkedList 클래스의 함수에서 Node 클래스의 '데이터'및 '다음'필드에 액세스 할 수있는 이유를 알아 내려고합니다.

때문에 Java 언어 사양이 그렇게 말한다

[...] 멤버 또는 생성자가 선언 된 경우 멤버 또는 생성자의 선언 private을 포함하는 최상위 클래스 (§7.6)의 본문 내에서 발생하는 경우에만 액세스가 허용됩니다.

귀하의 경우 최상위 클래스는 LinkedList입니다. 클래스 Node는의 멤버입니다 LinkedList. 따라서 그것의 LinkedList모든 부분에 액세스 할 수 있다는 것이 합리적입니다 ( Node).

여기에 추가하면 중첩 클래스가 'extends'키워드로 정의 된 하위 클래스와 동일한 것입니까?

아니요. 중첩 클래스에 대한 자세한 내용은 Java 자습서를 참조하십시오 . extends키워드는 상속에 사용됩니다. 해당 Java 자습서를 참조하십시오 .

노드가 연결된 목록의 중첩 클래스가되는 것이 나에게 더 합리적이었습니다. 이것이 완전히 정확하지 않다면 알려주세요 ...

아니, 당신이하는 일은 괜찮습니다. LinkedList클래스를 사용하는 사람 은 데이터 구조 또는 사양의 규칙을 따르는 한 클래스가 구현되는 방식에 관심이 없습니다. 귀하의 Node클래스는 중첩 되 고 private그 내용을 숨 깁니다. 이를 정보 숨김캡슐화라고 하며 이는 좋은 방법으로 간주됩니다.

중첩 된 클래스도 내부 클래스로 간주됩니다. 이전 링크에서도 이에 대해 읽을 수 있습니다.

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

Java의 파생 클래스에서 수퍼 클래스에 중첩 된 개인 내부 클래스에 액세스하는 방법이 있습니까?

분류에서Dev

Java의 정적 중첩 클래스간에 개인 필드에 대한 액세스를 제한 할 수 있습니까?

분류에서Dev

하위 클래스의 개인 필드는 수퍼 클래스에서 액세스 할 수 있습니다.

분류에서Dev

중첩 클래스의 클래스 내 친구가 외부 클래스 멤버에 액세스 할 수 있습니까?

분류에서Dev

중첩 클래스의 클래스 내 친구가 외부 클래스 멤버에 액세스 할 수 있습니까?

분류에서Dev

정적 중첩 클래스는 외부 클래스의 개인 생성자에 액세스 할 수 있습니다.

분류에서Dev

클래스 외부에서 중첩 된 클래스에 액세스 할 수 없습니다.

분류에서Dev

클래스 외부에서 중첩 된 클래스에 액세스 할 수 없습니다.

분류에서Dev

Android Java / Kotlin에서 인터페이스를 구현하면 중첩 클래스의 로컬 변수에 직접 액세스 할 수 있습니다.

분류에서Dev

파생 클래스가 내부 클래스의 친구 인 부모 클래스의 보호 된 내부 클래스의 전용 메서드에 액세스 할 수 있습니까?

분류에서Dev

클래스 자체가 private 변수에 액세스 할 수 있다는 점을 제외하고 Java에서와 같이 서브 클래스 객체가 수퍼 클래스의 개인 변수에 어떻게 액세스합니까?

분류에서Dev

왜 자식 클래스가 부모 클래스의 private 멤버에 액세스 중첩하지만, 손자 수 없어 할 수 있습니까?

분류에서Dev

왜 자식 클래스가 부모 클래스의 private 멤버에 액세스 중첩하지만, 손자 수 없어 할 수 있습니까?

분류에서Dev

어떻게 다른 클래스에 정의 된 개체에 액세스 할 수 있습니까?

분류에서Dev

중첩 된 Javascript 개체에 액세스 할 수 없습니다.

분류에서Dev

클래스에 선언 된 개인 멤버에 액세스 할 수 없습니다 : 큐 클래스 템플릿

분류에서Dev

이 중첩 된 클래스 생성자 스 니펫을 일반 클래스에 적용 할 수 있습니까?

분류에서Dev

클래스를 중첩하면 포함하는 클래스가 자식 클래스의 보호 된 데이터에 액세스 할 수있는 이유는 무엇입니까?

분류에서Dev

클래스 개체가 자신의 개인 멤버에 액세스 할 수 없습니까?

분류에서Dev

Java의 다른 클래스에서 반환 된 메서드 인스턴스에 액세스 할 수 없습니다.

분류에서Dev

Bluemix Geospatial Analytics가 중첩 된 값에 액세스 할 수 있습니까?

분류에서Dev

클래스 java.beans.Beans는 수정자가 ""인 Perosn.PersonDAO 클래스의 멤버에 액세스 할 수 없습니다.

분류에서Dev

이런 식으로 개인 변수에 액세스 할 수 있는데 기본 클래스의 개인 필드에 액세스 할 수없는 이유

분류에서Dev

C #의 클래스 속성에 메서드를 중첩 할 수 있습니까?

분류에서Dev

중첩 된 내부 클래스 : 상위 메서드에 액세스하고 중첩 된 클래스 유형의 변수를 노출합니다.

분류에서Dev

다른 클래스의 개인 객체에 어떻게 액세스 할 수 있습니까?

분류에서Dev

Swift : 중첩 된 배열의 개체에 액세스 할 수 없습니다.

분류에서Dev

중첩 된 불변 개체의 배열에 액세스 할 수 없습니다.

분류에서Dev

여러 클래스가있는 중첩 된 div 내의 자식에 액세스

Related 관련 기사

  1. 1

    Java의 파생 클래스에서 수퍼 클래스에 중첩 된 개인 내부 클래스에 액세스하는 방법이 있습니까?

  2. 2

    Java의 정적 중첩 클래스간에 개인 필드에 대한 액세스를 제한 할 수 있습니까?

  3. 3

    하위 클래스의 개인 필드는 수퍼 클래스에서 액세스 할 수 있습니다.

  4. 4

    중첩 클래스의 클래스 내 친구가 외부 클래스 멤버에 액세스 할 수 있습니까?

  5. 5

    중첩 클래스의 클래스 내 친구가 외부 클래스 멤버에 액세스 할 수 있습니까?

  6. 6

    정적 중첩 클래스는 외부 클래스의 개인 생성자에 액세스 할 수 있습니다.

  7. 7

    클래스 외부에서 중첩 된 클래스에 액세스 할 수 없습니다.

  8. 8

    클래스 외부에서 중첩 된 클래스에 액세스 할 수 없습니다.

  9. 9

    Android Java / Kotlin에서 인터페이스를 구현하면 중첩 클래스의 로컬 변수에 직접 액세스 할 수 있습니다.

  10. 10

    파생 클래스가 내부 클래스의 친구 인 부모 클래스의 보호 된 내부 클래스의 전용 메서드에 액세스 할 수 있습니까?

  11. 11

    클래스 자체가 private 변수에 액세스 할 수 있다는 점을 제외하고 Java에서와 같이 서브 클래스 객체가 수퍼 클래스의 개인 변수에 어떻게 액세스합니까?

  12. 12

    왜 자식 클래스가 부모 클래스의 private 멤버에 액세스 중첩하지만, 손자 수 없어 할 수 있습니까?

  13. 13

    왜 자식 클래스가 부모 클래스의 private 멤버에 액세스 중첩하지만, 손자 수 없어 할 수 있습니까?

  14. 14

    어떻게 다른 클래스에 정의 된 개체에 액세스 할 수 있습니까?

  15. 15

    중첩 된 Javascript 개체에 액세스 할 수 없습니다.

  16. 16

    클래스에 선언 된 개인 멤버에 액세스 할 수 없습니다 : 큐 클래스 템플릿

  17. 17

    이 중첩 된 클래스 생성자 스 니펫을 일반 클래스에 적용 할 수 있습니까?

  18. 18

    클래스를 중첩하면 포함하는 클래스가 자식 클래스의 보호 된 데이터에 액세스 할 수있는 이유는 무엇입니까?

  19. 19

    클래스 개체가 자신의 개인 멤버에 액세스 할 수 없습니까?

  20. 20

    Java의 다른 클래스에서 반환 된 메서드 인스턴스에 액세스 할 수 없습니다.

  21. 21

    Bluemix Geospatial Analytics가 중첩 된 값에 액세스 할 수 있습니까?

  22. 22

    클래스 java.beans.Beans는 수정자가 ""인 Perosn.PersonDAO 클래스의 멤버에 액세스 할 수 없습니다.

  23. 23

    이런 식으로 개인 변수에 액세스 할 수 있는데 기본 클래스의 개인 필드에 액세스 할 수없는 이유

  24. 24

    C #의 클래스 속성에 메서드를 중첩 할 수 있습니까?

  25. 25

    중첩 된 내부 클래스 : 상위 메서드에 액세스하고 중첩 된 클래스 유형의 변수를 노출합니다.

  26. 26

    다른 클래스의 개인 객체에 어떻게 액세스 할 수 있습니까?

  27. 27

    Swift : 중첩 된 배열의 개체에 액세스 할 수 없습니다.

  28. 28

    중첩 된 불변 개체의 배열에 액세스 할 수 없습니다.

  29. 29

    여러 클래스가있는 중첩 된 div 내의 자식에 액세스

뜨겁다태그

보관