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();
                         ^

解决方案 »

  1.   

    have a try
    LList.Node newNode = l.new Node(((Object)newEntry));
      

  2.   

    LZ想问什么?
    protected访问权限是同一包的类或继承该类的子类
    所以,SortedList继承LList,可以访问LList的protected属性和方法,同样的,也能访问SortedList的protected内部类Node(即LList.Node可以访问,如果是private则不行),但是LList的内部类Node本身的属性和方法是protected,根据protected的访问权限可知,只有在同一包或该类的子类才能访问,而SortedList既不是Node的子类,也不是和Node在同一包,所以SortedList不能直接访问Node的protected属性和方法
      

  3.   

    LZ不妨做个实验自己理解一下吧
    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;
        }
        */
    }