我只是想做的是从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
我相信除了实例化之外,我没有引用任何东西。
答案 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
内实施OrderedLinkedList
班Test
?
将内部类移动到自己的文件中。它应该工作。