• ベストアンサー

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

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

  • re97
  • お礼率80% (601/744)
  • Java
  • 回答数3
  • ありがとう数2

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

  • ベストアンサー
回答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

  • 内部クラスのインスタンスを外部クラスが保持する場合

    C++での内部クラスの宣言の仕方なのですが、例えば、 class Outer { private:    class Inner; public:    Outer();    ~Outer(); }; class Outer::Inner { public:    Inner();    ~Inner(); }; のように単純に内部クラスが宣言されているだけならば、 その具体的な定義を外側に書くことは可能と思うのですが、 class Outer { private:    class Inner    {    public:       Inner();       ~Inner();    }; public:    Outer();    ~Outer();    Inner inner; //内部クラスのインスタンス }; のように外部クラスが内部クラスのインスタンスを保持していた場合には、 上記のようにインスタンス作成より上で外部クラスの宣言内に内部クラスの定義を書かないと、 コンパイルが通らない(VC++2008)と思います。具体的な中身がないままインスタンスを 作っているのでエラーを吐く理由もわからないでもないですが、 見易さ的に上の例のようにかけないのかなとも思ったりします。 インスタンスを外部クラスに持たせずともどうとでもなるのですが、 あえて上のようなことをしたくなった場合には下のような方法で記述する以外ないのでしょうか?

  • クラスを定義したいのですが下記は同じ意味でしょうか

    JavaScriptで、クラス(のようなもの)を定義したいのですが、 下記は同じ意味でしょうか? ・var Hoge = function() {}; ・function Hoge() {}; 上は、Hogeクラスを定義したことになるのでしょうか? それとも単に無名クラス(?)を、変数へ格納しただけ?

  • 外部クラスにアクセス

    例えばAクラスで宣言した外部クラス、BクラスとCクラスがあったとします。 例えばそのBクラスから(Aクラスで宣言されて実行中の)Cクラスにアクセス する方法はないでしょうか? 内部クラスにはしたくありません。知っているという方は教えて下さい。もし なければないで結構ですので、それも教えて下さい。お願いします。

    • ベストアンサー
    • Java
  • 「エンクロージング型」と「外側クラス」との違い

    ・エンクロージングインスタンスとは、外側クラスのインスタンスのことでしょうか? ・エンクロージング型とは、何のことですか? >エンクロージング型とは内部クラスを持ったクラスのこと ・と書いてあるのですが、そうすると「エンクロージング型」=「外側クラス」なのでしょうか? >外部クラスと関係性の強いクラスの場合に利用される ・どういう意味でしょうか? ・「外側クラス(外部クラス?)と、「エンクロージング型」の関係性を知りたいです ▽web用語辞典 - エンクロージング型   http://www23.atwiki.jp/sevenlives/pages/417.html

    • ベストアンサー
    • Java
  • [C++]クラスの宣言と定義の違いって?

    クラスの宣言と定義の違いってなになのでしょうか? 宣言(定義)とは具体的にどのような記載をいうのでしょうか? いろいろ調べてこうかなっというのを記載します。 私の中では、宣言はメモリの割り当てがなされていない、宣言はメモリの割り当てがなされるという認識です。 class CSubCalss : public CSuperClass { public: } ↑これが宣言 int main () { CSubCalss a; ←これが定義 return 0; }

  • 内部クラスのスコープについて。

    内部クラスのスコープ、friendクラスのスコープについて詳しいかたお願いします。 以下のクラス構成の場合に、 1.Outerクラスのすべてメンバー関数からはInnerクラスのすべての関数にアクセスできるのでしょうか? 2.InnerクラスからOuter::outerPrivateFunction(); を利用するためにはInnerクラスをOuterクラスのfriendにする方法以外にありますでしょうか? 3.InnerクラスからOuter::outerInt にどのようにしてもアクセスできません。ためした方法はInnerクラスをOuterクラスのfriendにする方法です。 このようなクラス構成にしてしまうと不可能なのでしょうか? 4.friendにしたクラスはprivateの変数、関数にアクセス可能になるはずですが、 それは外部クラスに限ってのことで内部クラスには当てはまらないのでしょうか? class Outer { private: class Inner { Innerfunction(); Onter* pOuter; } outerPrivateFunction(); int outerInt; } 説明に不足があれば補足いたしますのでお詳しいかた宜しくお願いします。

  • ローカルインナークラス

    ローカルインナークラスとは、 メソッド内で宣言されるクラス、 ですよね? ある問題に 「メソッドのブロック内でローカルインナークラスを定義した場合正しいものを選びなさい。 ○、インナークラスはfinalで宣言されたローカル変数しか使えない」 ???? ローカルクラスは「外部クラスのメンバ変数への参照更新は可能」ですよね??? 例 class Outer{   int count=0;     void func(){       class Inner{         void display(){           count++;         }       }     } } 外部クラスのcountにアクセスできますよね?? 問題が間違っているのか、 私が考え違いをしているのか、教えてください。

    • ベストアンサー
    • Java
  • 内部電源 外部電源の違い

    内部電源と外部電源の定義が辞書などを調べても今一よくわかりません。 どなたか、具体例を交えて教えてください。 宜しくお願い致します。

  • C++でのstringクラスの内部の挙動

    最近C++でクラスを理解し始めて疑問に思ったことなんですが。 string A = "abcdef"; という風に直感的にstringに文字列を代入出来ていたので何の疑問も持たず使っていたんですが、これをどのように実現しているか内部の挙動がよくわかりません。 srtcopyはやり方は面倒臭いですがこっちは単純に関数に値を渡しているだけなので理解出来ます。 内部で=演算子のオーバーロードをしているんじゃないかと思って、=演算子をオーバーロドした自分で作ったクラスでテストしてみたんですが Testclass A; A = "abcdef"; は可能ですが、stringの例のように変数宣言と同時に代入する Testclass A = "abcdef" としてみると、Testclass型への変換が出来ませんとなって、string型と同じ事が出来ません。 stringクラスの中でどのようにクラス宣言直後の代入をしているか教えてください

  • クラスのスコープ範囲

    再度お世話になります。 C++のクラスについての質問ですが、 別ファイル(別のDLL)に定義されているメンバ関数を利用したいのですが、 どのように外部宣言すればよろしいのでしょうか。 どうぞ宜しくお願いします。 例) A.dll あるクラス内に格納されている値を取得する為に、 Get_XXXというメンバ関数が定義されている。 B.dll こちらからその値をそのメンバ関数を利用して取得する。

専門家に質問してみよう