• ベストアンサー

無名内部クラスと匿名内部クラスと匿名クラスの違い

■外部クラス ・外部クラスの定義を教えてください ・内部クラスに対して外部クラスと言うのであれば、「クラス内に宣言されたクラスがないクラス(普通のクラス?)」は外部クラスとは言わないのでしょうか? ■無名クラス ・無名クラスは必ず内部クラスなのでしょうか? ■同じ意味? 下記は同じ意味でしょうか? ・無名内部クラス ・匿名クラス ・無名クラス ・匿名内部クラス

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

・外部クラスの定義を教えてください ⇒ 内部クラスを持ったクラスのことです。   なので ・内部クラスに対して外部クラスと言うのであれば、「クラス内に宣言されたクラスがないクラス(普通のクラス?)」は外部クラスとは言わないのでしょうか? ⇒ 言いません。視点が違います。   「内部クラス」から見て「外部クラス」であり   「外部クラス」から見て「内部クラス」となっています。   なので、「あなた」から見て「外部クラス」と「通常のクラス」は同じでも、別物となります。 ・無名クラスは必ず内部クラスなのでしょうか? ⇒ そんなことはありません。   通常のクラスも無名クラスとして扱います。 下記は同じ意味でしょうか? ⇒ 無名内部クラス = 匿名内部クラス   匿名クラス = 無名クラス   無名クラス != 無名内部クラス 上記は私の認識なので、ちょっと違うかもしれませんが…。 SJC-Pの対策か何かでしょうか? 作りながら「これって何だろう」と調べていれば、それなりに理解できると思います。 大切なのは作れることです。 精進ガンバって下さい!

re97
質問者

補足

回答ありがとうございました。 説明分かりやすかったです。 後二つ疑問があるので、教えてください ・「内部クラス」=「インナークラス」=「ローカル内部クラス」でしょうか? ・無名内部クラスを宣言できる場所は、外部クラスのメソッド内と決まっているのでしょうか? (外部クラスの中ならどこでも良いか、あるいは外部クラスの中でも決まった場所だけかを確認したいです)

その他の回答 (2)

  • mpro-gram
  • ベストアンサー率74% (170/228)
回答No.3

以下をよむのが解りやすいと思う。 http://javafaq.jp/S016.html 概略としては  もっとも大きな括りは、「ネストした型」{staticなメンバークラスと内部クラス。何らかのクラス内にある}{内部クラスに、非staticなメンバークラス、匿名クラス、ローカルクラスを含む} と、一番外側「トップレベルクラス」{中にさらにクラスを持ってるかどうかに関係なく、package直下のクラス}  匿名(anonymous class)名前を持たない=無名 でいいでしょう。 匿名クラスは、インスタンス生成式の書けるところならどこにでも書ける。 java は、メンバー宣言部にもブロックにも式が書けるから、トップレベルクラス内部ならどこにでも匿名クラスを書けるということになる。しかし、メンバークラスとは別物なので注意。 匿名内部クラスという用語は使わないようですよ。

re97
質問者

お礼

「回答」&「リンクご提示」ありがとうございます。 下記説明、大変参考になりましたー >大きな括りは、「ネストした型」{staticなメンバークラスと内部クラス。何らかのクラス内にある}{内部クラスに、非staticなメンバークラス、匿名クラス、ローカルクラスを含む}

回答No.2

No.1です。 ・「内部クラス」=「インナークラス」=「ローカル内部クラス」でしょうか? ⇒ 「内部クラス」=「インナークラス」ですが   「ローカル内部クラス」はちょっと違います。   「無名クラス」同様にメソッド内に宣言できるのですが、無名ではありません。   ローカル内部クラスは、無名クラスでは可読性が悪い場合などで使いますが…業務ではあまり使ったことがないです(汗) ・無名内部クラスを宣言できる場所は、外部クラスのメソッド内と決まっているのでしょうか? ⇒ メンバ変数として宣言も可能です。   また、public static classであれば、全く別のクラスからでもアクセス可能です。 (外部クラスの中ならどこでも良いか、あるいは外部クラスの中でも決まった場所だけかを確認したいです) ⇒ 上記の内容でこちらの疑問は解決されてますか? 元々英語だったのが日本語訳された結果、色々な言葉になってしまっているものもありますよね…

re97
質問者

お礼

回答ありがとうございます。 「ローカル内部クラス」はまた別なんですね。 大変参考になりましたー

関連するQ&A

専門家に質問してみよう