package c04;public class LList implements ListInterface {
private Node firstNode;
private int length;
public LList() {
clear();
} protected class Node {
private Object data;
private Node next;
protected Node(Object dataPortion) {
data = dataPortion;
next = null;
} protected Node(Object dataPortion , Node nextNode) {
data = dataPortion;
next = nextNode;
} protected void setData(Object data) {
this.data = data;
} protected void setNext(Node next) {
this.next = next;
} protected Node getNext() {
return next;
} protected Object getData() {
return data;
}
}
protected Node getFirstNode() {
return firstNode;
} protected void setFirstNode(Node firstNode) {
this.firstNode = firstNode;
} protected void setLength(int length) {
this.length = length;
} protected void incrementLength() {
length++;
} protected void decrementLength() {
length--;
}//SortedList类继承LList
package c14;import c04.LList;
import c13.SortedListInterface;public class SortedList extends LList implements SortedListInterface {
public boolean add(Comparable newEntry) {
LList l = new LList();
LList.Node newNode = l.new Node(newEntry);
Node nodeBefore = getNodeBefore(newEntry); if(isEmpty() || nodeBefore == null) {
newNode.setNext(getFirstNode());
setFirstNode(newNode);
}
else {
Node nodeAfter = nodeBefore.getNext();
newNode.setNext(nodeAfter);
nodeBefore.setNext(newNode);
}
incrementLength();
return true;
} private Node getNodeBefore(Comparable anEntry) {
Node currentNode = getFirstNode();
Node nodeBefore = null; while((currentNode != null) && (anEntry.compareTo(currentNode.getData()) > 0)) {
nodeBefore = currentNode;
currentNode = currentNode.getNext();
} return nodeBefore;
}
}错误如下:
SortedList.java:9: 找不到符号
符号: 构造函数 Node(java.lang.Comparable)
位置: 类 c04.LList.Node
LList.Node newNode = l.new Node(newEntry);
^
SortedList.java:13: setNext(c04.LList.Node) 可以在 c04.LList.Node 中访问 protected
newNode.setNext(getFirstNode());
^
SortedList.java:17: getNext() 可以在 c04.LList.Node 中访问 protected
Node nodeAfter = nodeBefore.getNext();
^
SortedList.java:18: setNext(c04.LList.Node) 可以在 c04.LList.Node 中访问 protected
newNode.setNext(nodeAfter);
^
SortedList.java:19: setNext(c04.LList.Node) 可以在 c04.LList.Node 中访问 protected
nodeBefore.setNext(newNode);
^
SortedList.java:30: getData() 可以在 c04.LList.Node 中访问 protected
while((currentNode != null) && (anEntry.compareTo(currentNode.getData()) > 0)) {
^
SortedList.java:32: getNext() 可以在 c04.LList.Node 中访问 protected
currentNode = currentNode.getNext();
^
LList.Node newNode = l.new Node(((Object)newEntry));
protected访问权限是同一包的类或继承该类的子类
所以,SortedList继承LList,可以访问LList的protected属性和方法,同样的,也能访问SortedList的protected内部类Node(即LList.Node可以访问,如果是private则不行),但是LList的内部类Node本身的属性和方法是protected,根据protected的访问权限可知,只有在同一包或该类的子类才能访问,而SortedList既不是Node的子类,也不是和Node在同一包,所以SortedList不能直接访问Node的protected属性和方法
public class SortedList extends LList {
protected class SubNode extends Node { //继承Node类
public SubNode(Object obj) {super(obj);}
public void setNext(Node next) {
super.setNext(next); //可以访问Node的protected方法
}
}
/*
public boolean add(Comparable newEntry) {
LList l = new LList();
LList.Node newNode = l.new Node(newEntry);
Node nodeBefore = getNodeBefore(newEntry); if(nodeBefore == null) {
newNode.setNext(getFirstNode());
setFirstNode(newNode);
}
else {
Node nodeAfter = nodeBefore.getNext();
newNode.setNext(nodeAfter);
nodeBefore.setNext(newNode);
}
incrementLength();
return true;
} private Node getNodeBefore(Comparable anEntry) {
Node currentNode = getFirstNode();
Node nodeBefore = null; while((currentNode != null) && (anEntry.compareTo(currentNode.getData()) > 0)) {
nodeBefore = currentNode;
currentNode = currentNode.getNext();
} return nodeBefore;
}
*/
}