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 のインスタンスがないと不平を言っています。

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

IF 内部クラスが要件である場合は、クラスを静的クラスにします

于 2012-10-18T04:18:34.350 に答える
1

2 つのクラスを別々のファイルに保管します。ただし、内部クラスが目標である場合

次のようにアクセスします

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 として宣言してみてください:

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

別のpublicクラス内にクラスを実装するのはなぜですか?OrderedLinkedListTest

内部クラスを独自のファイルに移動します。それはうまくいくはずです。

于 2012-10-18T04:23:55.203 に答える