1

匿名内部クラスの概念を利用するために、これら 2 つのクラスを作成しました。クラス 1 には静的内部クラスがあります。クラス 2 はそれを使用します。しかし、内部クラスのメソッドを呼び出す方法がわかりません。私を助けてください。

クラス1

public class outerclass {
  outerclass() {
    System.out.println("Constructor of new class");
  }

  public void showthis(String str) {
    System.out.println(str);
  }

  static class insideclass {
    insideclass() {
      System.out.println("This is inside class constructor");
    }

    public void nowshowthis(String str) {
      System.out.println(str);
    }
  }
}

クラス2

public class helloworld {
  public static void main(String args[]) {
    //this is an object of the outer class
    outerclass example=new outerclass();
    //How do i make an anonymous inner class and call the method "nowshowthis()"
  }
}
4

5 に答える 5

3

差し迫った問題から抜け出させてください!非静的の内部クラスの場合、これをインスタンス化する方法は次のとおりです: ( exampletype のオブジェクトであると仮定outerclass)

  example.new insideclass().nowshowthis("my String")

static public内部クラスの場合、外部クラスのインスタンスさえ必要ありません。これを行うだけです(パブリック静的変数にアクセスするのと同じように)

new outerclass.insideclass().nowshowthis("my String")

これを試しましたか?

どうしたんだ?あなたの場合、匿名の内部クラスを実際に扱っているわけではありません。実際には、単なるバニラの内部クラスです。(なぜそんなことをするのか、私には理解できません。)

では、匿名クラスとは何で、どこで使用するのでしょうか? 匿名クラスは、一度だけ使用するクラスのインスタンスのようなものです。いくつかのインターフェイスを実装すると、例の 1 つが表面化しますが、それ以外の方法で使用する必要はありません。たとえば、ハンドラーをボタンにアタッチするとします。あなたはこのようにそれを行うことができます(架空の例)

   MyButtonInterface obj= new MyButtonInterface(){
      @Override
      onClick(Model obj){
             //save model in DB
       }
   }
   UI.add(obj, "specificId");

分かりますか?

于 2012-08-21T15:22:23.927 に答える
1

insideclass非静的クラスであるため、次のように外部クラスのインスタンスを介してアクセスする必要があります。
new outerclass().new insideclass().nowshowthis();

于 2012-08-21T15:24:36.347 に答える
1
public class HelloWorld {

    public static void main(String args[])
        {


        outerclass.insideclass example= new outerclass.insideclass();

        example.nowshowthis("Hello");


    }
}

または、nowshowthis メソッドを静的にすると、次のように呼び出すことができます。

outerclass.insideclass.nowshowthis("Howdy. This method is static.");
于 2012-08-21T15:32:32.637 に答える
1

それは匿名の内部クラスではありません。匿名内部クラスの例を次に示します。

class InnerClassDemo {
  public static void main(String[] args) {
    ActionListener a = new ActionListener() {
      @Override
      public void actionPerformed(ActionEvent e) {
        System.out.println(e.getActionCommand());
      }
    };
    // now a is the only instance of an anonymous inner class implementing the ActionListener interface
  }
}

もちろん、独自のインターフェイスまたはクラスでこれを行うこともできます。

class InnerClassDemo {
  public class InsideClass {
      InsideClass() {
          System.out.println("This is inside class constructor");
      }

      public void nowshowthis(String str) {
          System.out.println(str);
      }
  }

  public static void main(String[] args) {
    InsideClass anonym = new InsideClass() {
      @Override
      public void nowshowthis(String str) {
          System.out.println("anonymous inner class override: "+str);
      }
    }
    InsideClass normalInstance = new InsideClass();
    anonym.noshowthis("test");
    normalInstance.noshowthis("test");
  }
}

あなたの出力は

anonymous inner class override: test
test

anonymの匿名内部クラス実装のインスタンスも同様です。 whileはInsideClassnormalInstanceクラスの通常のインスタンスですInsideClass

于 2012-08-21T15:30:41.033 に答える