내가 이해했듯이 개인 필드는 정의 된 클래스에서만 액세스 할 수 있습니다.
기초적인 단일 연결 목록에 대한이 코드가 있습니다.
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'키워드로 정의 된 하위 클래스와 동일한 것입니까?
도움을 주셔서 감사합니다.
편집 :이 질문에 추가하면 연결된 목록의 다른 구현에서 사람들이 노드와 목록에 대해 두 개의 별도 클래스를 정의하는 것을 봅니다. 노드가 연결된 목록의 중첩 클래스가되는 것이 나에게 더 합리적이었습니다. 이것이 완전히 정확하지 않다면 알려주세요 ...
하지만 LinkedList 클래스의 함수에서 Node 클래스의 '데이터'및 '다음'필드에 액세스 할 수있는 이유를 알아 내려고합니다.
[...] 멤버 또는 생성자가 선언 된 경우 멤버 또는 생성자의 선언
private
을 포함하는 최상위 클래스 (§7.6)의 본문 내에서 발생하는 경우에만 액세스가 허용됩니다.
귀하의 경우 최상위 클래스는 LinkedList
입니다. 클래스 Node
는의 멤버입니다 LinkedList
. 따라서 그것의 LinkedList
모든 부분에 액세스 할 수 있다는 것이 합리적입니다 ( Node
).
여기에 추가하면 중첩 클래스가 'extends'키워드로 정의 된 하위 클래스와 동일한 것입니까?
아니요. 중첩 클래스에 대한 자세한 내용은 Java 자습서를 참조하십시오 . 이 extends
키워드는 상속에 사용됩니다. 해당 Java 자습서를 참조하십시오 .
노드가 연결된 목록의 중첩 클래스가되는 것이 나에게 더 합리적이었습니다. 이것이 완전히 정확하지 않다면 알려주세요 ...
아니, 당신이하는 일은 괜찮습니다. LinkedList
클래스를 사용하는 사람 은 데이터 구조 또는 사양의 규칙을 따르는 한 클래스가 구현되는 방식에 관심이 없습니다. 귀하의 Node
클래스는 중첩 되 고 private
그 내용을 숨 깁니다. 이를 정보 숨김 및 캡슐화라고 하며 이는 좋은 방법으로 간주됩니다.
중첩 된 클래스도 내부 클래스로 간주됩니다. 이전 링크에서도 이에 대해 읽을 수 있습니다.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다