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

时间:2012-10-18 04:17:20

标签: 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;
        }
    }

}

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

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

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

6 个答案:

答案 0 :(得分:5)

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

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

public static class OrderedLinkedList extends LinkedList<Integer> {

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

答案 1 :(得分: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;
            }
        }

如果内部类是您的要求,那么将您的类作为静态类

答案 2 :(得分:1)

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

按如下方式访问

new Test().new OrderedLinkedList(); 

答案 3 :(得分:0)

您的班级OrderedLinkedList不在静态环境中。请将public class OrderedLinkedList extends LinkedList<Integer>更改为public static class OrderedLinkedList extends LinkedList<Integer>并进行编译。阅读静态和实例变量有助于理解更多内容。

答案 4 :(得分:0)

尝试将ol声明为静态:

static OrderedLinkedList ol = new OrderedLinkedList();

答案 5 :(得分:0)

为什么要在另一个班级public内实施OrderedLinkedListTest

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