为什么我不能在Java中实例化扩展类的实例?

knd*_*knd 2 java oop inheritance static extends

我只是想做的是从LinkedList扩展一个类.这是我的代码:

  import java.util.*;

  class Test {

    public static void main( String [] args ) {

        OrderedLinkedList ol = new OrderedLinkedList();
    }

    public class OrderedLinkedList extends LinkedList<Integer> {

        public boolean add( Integer item ) {
            for (int i=0; i < size(); i++) {
                Integer itemOfList = get( i );
                if ( itemOfList.compareTo( item ) > 0 ) {
                    add( i, item );
                    break;
                }
            }
            return true;
        }
    }

}
Run Code Online (Sandbox Code Playgroud)

但是,我收到此消息的编译错误:

Test.java:7: non-static variable this cannot be referenced from a static context
        OrderedLinkedList ol = new OrderedLinkedList();
                               ^
1 error
Run Code Online (Sandbox Code Playgroud)

我相信除了实例化之外,我没有引用任何东西.

Tom*_*Tom 5

内部类具有对其外部类的隐式引用,除非标记为static.

您需要将内部类标记为static以避免这种情况:

public static class OrderedLinkedList extends LinkedList<Integer> {
Run Code Online (Sandbox Code Playgroud)

所以编译器抱怨内部类没有Test的实例,因为main是静态方法.