• ベストアンサー

「エンクロージング型」と「外側クラス」との違い

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

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

  • ベストアンサー
  • root139
  • ベストアンサー率60% (488/809)
回答No.2

まず、型の種類を整理しておきましょう。 Javaの型は、int や float などの基本型と参照型に大別されます。 参照型にはクラスとインターフェースが含まれます。参照型には他にも配列型と列挙型が有りますが、クラスの特殊なものと考えてよいでしょう。 > エンクロージングインスタンスとは、外側クラスのインスタンスのことでしょうか? 外側の型のインスタンスという事になります。外側のクラスのインスタンスもそうですが、外側の型がインターフェースの場合でもそのインスタンスはエンクロージングインスタンスという事になります。 > エンクロージング型とは内部クラスを持ったクラスのこと 内外共にクラスだけではないですね。 正確に言い直すと、「エンクロージング型とはネストした型を持った型のこと」となります。ネストした型はメンバ型とも言います。 もちろん、内部クラスを持ったクラスもエンクロージング型の一種です。 また、ネストした型には、内部クラス以外にも、 static なメンバクラス、メンバインターフェース(常にstatic)、ローカル内部クラス、無名クラス(匿名クラス)があります。 > 外部クラスと関係性の強いクラスの場合に利用される まあ、傾向というか、ネストした型はそういう使われ方を想定していると言うべきでしょうか。 エンクロージング型と無関係なクラスをメンバーに持たせる事も出来ますが、それはバッドプラクティスと言ってよいでしょう。 > 「外側クラス(外部クラス?)と、「エンクロージング型」の関係性 外部クラス(正式な呼び方で有りませんが)はエンクロージング型の一種です。 おそらく、質問文のリンク先では説明を簡単にする為にインターフェースの存在を無視した書き方になっているのでしょう。ですから、「エンクロージング型」=「エンクロージングクラス」(外部クラス) というスタンスで書いているのかと。

参考URL:
http://www.ne.jp/asahi/hishidama/home/tech/java/class_def.html#h2_member_class
re97
質問者

お礼

回答ありがとうございました。 >「エンクロージング型とはネストした型を持った型のこと」となります。ネストした型はメンバ型とも言います。 >もちろん、内部クラスを持ったクラスもエンクロージング型の一種です。 >また、ネストした型には、内部クラス以外にも、 static なメンバクラス、メンバインターフェース(常にstatic)、ローカル内部クラス、無名クラス(匿名クラス)があります ・参考になりましたー >エンクロージング型と無関係なクラスをメンバーに持たせる事も出来ますが、それはバッドプラクティスと言ってよいでしょう ・説明ありがとうございました ・「出来る出来ない」と「推奨かどうか」は別な話なんですねー

その他の回答 (3)

回答No.4

>▽Java Platform SE 6 >  http://docs.oracle.com/javase/jp/6/api/ ではなくて 「Java Language Specification」 https://www.google.co.jp/search?q=java+language+specification&aq=0&oq=Java+language+Spe&aqs=chrome.1.57j0l3j62l2.7729j0&sourceid=chrome&ie=UTF-8 あたりを見てください。個人が訳したものでよければ http://www49.atwiki.jp/akios/pages/18.html がありますが信頼性はよくわかりません。 >>内部クラスというのは3種の型の総称です >・そこら辺はどこに掲載されているのでしょうか? ローカルクラス、匿名クラス、メンバクラスの説明で個別に inner class だと 説明されていたはずです。一箇所にまとまった記述は無かったと思います。 #仕様書なのでこういう点は不親切です。 場所は覚えていないので、仕様をあたってみてください。

re97
質問者

お礼

回答ありがとうございました。 「Platform」ドキュメント見ても載っていないなと以前から疑問に思っていたのですが、「Language」ドキュメントが別にあるんですね。 初めて知りました。 リンク先、大変参考になりましたー

回答No.3

>内部クラス以外にも、 static なメンバクラス、 >メンバインターフェース(常にstatic)、ローカル内部クラス、 >無名クラス(匿名クラス)があります。 重箱の隅ですが、Java の仕様書では ネストした型(=型に内包される型)=  ネストしたインターフェース、内部クラス、staticなメンバクラス 内部クラス(=staticではないネストしたクラス)=  staticではないメンバクラス、ローカルクラス、匿名クラス なので、内部クラスというのは3種の型の総称です。 それと「外部クラス」という言葉は java の仕様には無いようです。 エンクロージング型という言葉の定義もありません。 Java の仕様書では、Enclosing はネストしたクラスを「取り囲んでいる」という 意味の形容詞として使われているだけです。 enclosingな型はそれ自体なにか特別な機能があるわけではないので こうなったんだと思います。

re97
質問者

補足

回答ありがとうございます。 >Java の仕様書では ・Java の仕様書とは、下記を指すのでしょうか? ・Java 公式サイト(ドキュメント)がどこか知りたいです ▽Java Platform SE 6   http://docs.oracle.com/javase/jp/6/api/ >内部クラスというのは3種の型の総称です ・そこら辺はどこに掲載されているのでしょうか?

回答No.1

>>エンクロージング型とは内部クラスを持ったクラスのこと >・と書いてあるのですが、そうすると「エンクロージング型」=「外側クラス」なのでしょうか? Javaでは間違いです。エンクロージング型は型を内包する型のことで 内包される型としては、インターフェース、staticのネストしたクラス、内部クラス の3種類があります。 エンクロージング型もクラスとは限らず、インターフェースの場合もあります。

re97
質問者

お礼

回答ありがとうございました。 >内包される型としては、インターフェース、staticのネストしたクラス、内部クラス >の3種類があります >エンクロージング型もクラスとは限らず、インターフェースの場合もあります 大変参考になりましたー

関連するQ&A