java - 从LinkedList的实现继承到SortedLinkedList,访问私有(private)Node

标签 java linked-list sortedlist

我对 Java 很陌生,我正在尝试自己实现链表,然后将其扩展到排序链表。

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

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

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,以便我可以在输入值时对值进行排序。我完成所有设置并创建类(class)

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 开始访问私有(private)节点的方法有关。因为我可以使用 LinkedList 中的 add 函数以相同的方式添加一个元素

@Override
public void add(T x){
super.add(x);
}

当我尝试将 LinkedList 中的方法直接添加到 SortedLinkedList 中并将其更改为

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

}

我确实设法使用了compareTo()并重写了add方法。

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

最佳答案

正如 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.

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

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

protected Node start;

关于java - 从LinkedList的实现继承到SortedLinkedList,访问私有(private)Node,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49238415/

相关文章:

java - 没有同步顺序的程序

java - 如何在linux机器中导入jar文件

java - 链表操作的时间复杂度

c# - 为什么排序字典和列表的添加、删除和获取值比未排序慢?

java - 从 Main 方法传递参数

java - CompletableFuture allOf 方法行为

c++ - 指向单链表中内存地址的指针,其中没有变量表示每个元素

C编程,双向链表复制问题

java - SortedLinkedList 删除两个节点之间的头部、尾部方法

c# - 如何解决 "Item has already been added. Key in dictionary:"错误?