从LinkedList的实现继承到SortedLinkedList,访问私有节点

时间:2018-03-12 15:04:14

标签: java linked-list sortedlist

我是Java的新手,我正在尝试自己实现链接列表,然后将其扩展到排序链接列表。

我认为我的问题是继承自LinkedList和>的SortedLinkedList类。无法访问私有Node启动;在LinkedList中。这是代码的简化。

我首先创建自己的List类接口

interface List<T> {
public int size();            
public void add(int pos, T x);  
public void add(T x);                 
public T get(int pos);             
public T remove();                   
}

并将其保存为List.java,然后创建我的链表类

class LinkedList<T> implements List<T> {

//Starting point of the Linked List
private Node start;

public class Node {
    T x;
    Node next;

    public Node(T x) {
        this.x= x;
    }
    public T getValue(){
      return x;
    }
}

//Here is implementations of all the methods from List<T> and some ohers
}

这一切都按预期工作,我测试了所有方法并确认它们正在工作。但是现在我想使用这个类创建另一个继承自LinkedList的类,并且还使用Comparable,这样我就可以在输入值时对值进行排序。我设置了所有内容并创建了类

public class SortedLinkedList<T extends Comparable<T>> extends LinkedList<T>{


//And here I try to do something like 
@Override
public void add(T x){
    //add logic to add a element
}

}

在这里,我尝试了很多不同的东西。但无论我如何创建方法,它都不会添加任何新的节点。我认为问题与无法从LinkedList访问私有节点的方法有关。但是我可以使用LinkedList中的add函数来通过执行

以相同的方式添加元素
@Override
public void add(T x){
super.add(x);
}

当我尝试直接在LinkededLinkedList中添加来自LinkedList的方法并将其更改为

public class SortedLinkedList<T extends Comparable<T>>{

}

我确实设法使用compareTo()和覆盖add方法。

我知道这很长,但我希望有人可以启发我。我确实尝试在LinkedList中创建一个getter和setter方法,但我没有设法以任何方式编译而没有错误。

1 个答案:

答案 0 :(得分:1)

正如JLS所述(https://docs.oracle.com/javase/specs/jls/se8/html/jls-8.html#jls-8.2):

Members of a class that are declared private are not inherited by subclasses of 
that class. Only members of a class that are declared protected or public are 
inherited by subclasses declared in a package other than the one in which the 
class is declared.

您最有可能在start类的add()实现中使用私有LinkedList变量。

要解决此问题,只需将访问修饰符更改为protected:

protected Node start;