0

確認を求めているだけです。

public class Indeed{
   public static class Inner implements Runnable{
         public void run()
    {
       System.out.println("Indeed");
    }

  }
    public static void main (String []args)
  {
     Indeed.Inner inner = new Indeed.Inner();
     inner.run();
  }
}

上記のコードでわかるように、staticpublic void run()を宣言せずに宣言できます。暗黙のうちに行われていると思います。ではない?

関連するもう1つの質問: メソッド run を次のように使用できないのはなぜですか:Indeed.Inner.run();結局静的なので、内部メンバーをインスタンス化する必要はまったくありませんか? (そうするとコンパイルされないので間違っていることはわかっていますが、その理由を知りたいです)。

前もって感謝します。

4

5 に答える 5

4

上記のコードでわかるように、static と宣言せずに public void run() を宣言できます。暗黙のうちに行われていると思います。ではない?

いいえ。

関連するもう 1 つの質問: メソッド run を次のように使用できないのはなぜですか: Indeed.Inner.run();

静的ではないからです。


static classは内部クラスに対してのみ有効であり、それを囲むクラス as によって静的クラスを指すことができますIndeed.Inner

これは、同じクラスのインスタンスを作成するために外側のクラスのインスタンスが必要な非静的内部クラスとは異なります。例えば:

Indeed.Inner inner = new Indeed().new Inner();
于 2013-05-28T09:46:18.767 に答える
2

いいえ、run()静的クラスのインスタンス メソッドですInner。(static内部) クラスは、親インスタンスを囲むことなくクラスのインスタンスを使用できるようにするだけです。を実行するIndeed.Inner inner = new Indeed.Inner();と、静的クラスのインスタンスが作成され、このインスタンスでそのメソッドが呼び出さrun()れます。

于 2013-05-28T09:45:43.950 に答える
1

静的クラスは単なる通常のクラスであり、実際には非静的クラスよりもそうです。

入れ子になった静的クラスと最上位クラスの違いは、アクセス スコープだけです。静的クラスは、それを囲むクラスのプライベート メンバーにアクセスできます。

それを片付けたら、ここで尋ねている質問をする必要はありません。

于 2013-05-28T09:49:48.750 に答える
0

静的内部クラス

public static class Inner implements Runnable

外部クラスのインスタンスを作成することなく、それらのインスタンスを作成できることを意味します ( Indeed)

Indeed.Inner inner = new Indeed.Inner();

次のようにメソッド run を使用できないのはなぜですか: Indeed.Inner.run() ?

runメソッドはデフォルトでは static ではありません。直接呼び出すには、メソッドもIndeed.Inner.run()作成する必要がありますrun()static

于 2013-05-28T09:47:28.663 に答える