2

我只是想做的是从 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;
        }
    }

}

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

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

我相信我没有引用任何东西,而是实例化。

4

6 回答 6

5

内部类具有对其外部类的隐式引用,除非标记为静态。

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

public static class OrderedLinkedList extends LinkedList<Integer> {

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

于 2012-10-18T04:18:43.343 回答
1

1) 关闭测试类 2) 如果你在同一个文件中有两个类,主类应该是文件名,只有主类应该是公共的。

public class Test {

    public static void main( String [] args ) {

        OrderedLinkedList ol = new OrderedLinkedList();
    }
}

然后

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;
            }
        }

如果内部类是您的要求,则将您的类设为静态类

于 2012-10-18T04:18:34.350 回答
1

将这两个类保存在单独的文件中。但是,如果内部课程是您的目标,那么

按如下方式访问它

new Test().new OrderedLinkedList(); 
于 2012-10-18T04:21:28.897 回答
0

您的课程OrderedLinkedList不在静态上下文中。请更改 public class OrderedLinkedList extends LinkedList<Integer>public static class OrderedLinkedList extends LinkedList<Integer>并编译它应该做的。阅读静态和实例变量将有助于理解更多。

于 2012-10-18T04:20:24.347 回答
0

尝试将 ol 声明为静态:

static OrderedLinkedList ol = new OrderedLinkedList();
于 2012-10-18T04:21:58.513 回答
0

你为什么要在另一个类中实现一个public类?OrderedLinkedListTest

将您的内部类移动到它自己的文件中。它应该工作。

于 2012-10-18T04:23:55.203 回答