その理由は、オブジェクトが直接作成したので、匿名匿名オブジェクトですが、それは匿名と呼ばれ、このオブジェクトに値を代入しませんでした。
クラスNOOBJECT { 無効メソッド() { System.out.printlnは( "NoNameObjこんにちは" ); } } クラスはNoName A { 公共の 静的な 無効メイン(文字列[] args)を{ 新しい新 NOOBJECT()メソッド();. // ここで作成したエンドオブジェクトの後に、それが直接のオブジェクトに値を代入しませんでしたが、オブジェクトへの直接呼び出しが完了した後に作成されたオブジェクトは、そのオブジェクトが<BR>と呼ばれる他のオブジェクトにすることはできません 。// オブジェクトを呼び出すためにために彼の名前を知っている必要がありますそれは、何の名前を呼んでいないためにどのように、これは、匿名性の概念です。ごみにビン後の呼び出しにすることはできません。 } }
通常の内部クラスを呼び出します
クラス外 { int型 NUM = 10 。 クラスインナー { ボイド方法() { するSystem.out.printlnは( +の"外部民が" NUM)。 } } ボイドsayInner() { 新インナー()メソッド()。 } } クラスInnerClassDemo2 { 公共 静的 ボイドメイン(文字列[]引数){ 新しい外部()sayInner()。 } }
匿名オブジェクト条件の使用:
内部クラスは、継承するか、我々は内部クラスを使用することができ、この条件を満たす外部インタフェースを実装する必要があります。コード例:
抽象 クラスAbsDemo { 抽象 ボイドデモ(); } クラス外 { int型 NUM = 10 ; 無効sayInnerは、() { / ** *私たちは、直接新しい親クラスやインタフェースを置くが、ことに注意することは一つのことがあります新しい親クラス以上のインターフェイスの後、または実装、 *括弧を追加するためのバックに加え、中括弧の意義は、これはクラスまたはインタフェースのクラスとサブクラスは、新しいキーワードの後ろにある場合、または達成言ったことです *その後、我々は、直接クラスまたはメソッドを覆うか、ブレースインターフェース後に実施 * / 新しい新しいAbsDemo() { ボイドデモ() { System.out.printlnは(「NoNameInnerClassこのデモである」); } } .demo()。//あなたが呼び出すことを忘れ後なぜなら、我々は単に新しいABS(){}これがないような場所では、私たちの新しいABS(){}多くの場合、非常にエラーが発生しやすい // 任意の意味をなさないこれが匿名クラスであるため、なぜ、 、クラス名、なくなって、もはや匿名の引用符、あなたが定義した後。だけで、すぐに呼び出すことができます 。// このメソッドはなります後に有意義。もう一つのポイントは、新た後であるため、クラス定義を完了するために、匿名の呼び出しの後、文の最後にセミコロンを忘れてはいけないということです // 声明はなく、クラスが宣言されています。 } } クラスInnerClassDemo2 { 公共 静的 ボイドメイン(文字列[]引数){ 新しい新しい外部()sayInner(); } }
人気の匿名内部クラスはこれです:匿名サブクラスオブジェクトです。:この方法は以下のように定義された新たな新しい親クラスまたはインタフェース(){}サブクラスコンテンツ
アプリケーションの匿名内部クラス:
シナリオ:関数のパラメータは、インターフェイスタイプで、インターフェイスメソッドは、その後、我々は、パラメータとして渡される匿名内部クラスを使用することができ、3以上ではありません。例えば:
インタフェースInterfaceDemo { 公共 ボイドshow1(); 公共 ボイドshow2(); } クラスInnerClassDemo2 { 公共 静的 ボイドメイン(文字列[]引数){ 方法(新しいInterfaceDemo(){ 公共 ボイドshow1() { System.out.printlnは( "ショー1" ); } 公共 ボイドshow2() { のSystem.out .println( "ショー2" ); } })。 } 静的 ボイド方法(InterfaceDemoデモ) { demo.show1()。 demo.show2(); } }
ここでの方法()メソッドは、受注期間は単純で、私たちは直接、匿名の内部クラスのオブジェクトが渡された使用のオブジェクトのインターフェイスタイプを必要とし、注意すべき場所は、これが今の場合であればということでもあります:
クラスInnerClassDemo2 { クラスインナー { } パブリック 静的 ボイドメイン(文字列[]引数){ 新しいインナー()。 } }
主な機能は静的であり、彼は非静的メンバ間の静的コンテキストを呼び出すことができない、クラスメンバに相当し、このクラスでは、内側{}が、非静的は自然に訴えるであろう。
ここでは、このような多型ノートなどの問題があります:
インタフェースInterfaceDemo { 公共 ボイドshow1(); 公共 ボイドShow2(); } クラスDuoTaiFalse { ボイド方法() { / ** *場所上方遷移が発生しました。即ち多型 * / InterfaceDemo inface = 新しい新しいInterfaceDemo(){ 公共 ボイドshow1() { System.out.printlnは( "Show1" ); } 公共 ボイドShow2() { System.out.printlnは( "Show2" )。 } 公共 のボイドSHOW3() { System.out.printlnは( "SHOW3" ); } }; inface.show1(); inface.show2は(); / ** この場所が間違っているのでInterfaceDemoのinface =新しいInterfaceDemo()この場所に運ばれたときに、{}、すでに起こっている この時点で、他のいくつかの方法で他の親にそれらを呼び出すことができなかったことを、*上向きの移行を。そうエラーが表示されます)(inface.show3呼び出し * / // inface.show3(); } } クラスInnerClassDemo2 { 公共 静的 ボイドメイン(文字列[]引数)を{ 新しい新しいDuoTaiFalse()メソッド();. } }