• ベストアンサー

ネストクラス

wo-007の回答

  • ベストアンサー
  • wo-007
  • ベストアンサー率68% (15/22)
回答No.1

「ネストクラス」と「インナークラス」についてですよね。 私もその違いがいまいちよく分からず、調べているうちに 単に名前の付け方の問題だと知りました。 ●インナークラス 広義と狭義の2つあります。 広い意味ではクラスの中で定義されている全てのクラスの事。 狭い意味ではクラスの中で定義され、なおかつ非staticであるクラスの事。 ●ネストクラス クラスの中で定義され、なおかつstaticであるクラスの事。 Java 1.1リリース時は広い意味での「インナークラス」が採用されていたそうです。 現在では一般的に、staticか否かで「ネストクラス」と「インナークラス」を 使い分けるようです。

azicyan
質問者

補足

なるほど! たんにStaticかどうかということなんですね! 書き方がややこしくて難しかったですが かなりわかりやすいです! 助かりました!

関連するQ&A

  • ネストトップクラス・メンバクラスについて

    現在、SJC-P取得に向け独学でJavaの勉強中です。 ネストクラス・インナークラスについて勉強している最中なのですが、 数冊テキストを読み込んでも、web検索をしても、イマイチよくわからない・・・というのが正直なところです。 どのクラス(アウタークラス/staticインナークラス/非staticインナークラス)の、 どういうメンバ(static/非static/private/final)が、 どのクラスのどういうメンバにアクセス出来るのかが整理しきれません・・・。 わからないなりに、まとめてみたのですが、理解が不十分で、かつ、この下記の通りの理解で正しいのかどうかもわかりません。 (言葉でうまく表現も出来ていない箇所も・・) また理解すべきポイントに不足があるかと思います。 どこが正しく理解出来ているのか・どこがどう間違っているかの指摘及びその内容・理解不足の箇所・よりわかりやすい例の追加や補記など、どうかよろしくお願い致します。 ●staticなインナークラス(=ネストトップクラス)について ・アウタークラスのインスタンスなしに、staticなインナークラスのインスタンスの生成が出来る。 ・staticなインナークラスからはアウタークラスの非staticメンバを直接アクセス出来ない。 (→ただし、staticアウターメンバになら直接アクセス出来る?staticであればprivateでもアクセス可?) ・staticなメソッド内で非staticなインナークラスのオブジェクトが生成出来ない。 ●非staticなインナークラス(=メンバクラス)について ・非staticなインナークラス内にstaticなメンバを持つことは出来ない。 ・アウタークラスのインスタンスを生成してからでないと非staticなインナークラスのインスタンスは生成出来ない。 ・アウタークラスの非staticメンバ及びstaticメンバに直接アクセス出来る。 ●アウタークラス(=外部クラス)について ・アウタークラスのstaticメソッド内で非staticなインナークラスのインスタンスは生成出来ない。 ・非staticインナークラスのメンバ及び、staticなインナークラスのメンバにアクセス出来る。 --------------------------------------------------------- (例)処理はさておき、定義はこんな感じを思い描いております・・ class Outclass{   private int aa;   private static int bb;   private outMethod1();   private static outMethod2();   class NotStaticInner{     private int cc;     //private static int dd;//不可     private inNotStaicMethod1();     //private static inNotStaticMethod2();//不可   }   class StaticInner{     private int ee;     private static int ff;     private inStaticMethod1();     private static inStaticMethod2();   } } 参考テキスト: 『Sun Certified Programmer for Java2 Platform5.0 Exam【310-055】』のChapter11:「ネストクラス・インナークラス」 参考URL: http://wisdom.sakura.ne.jp/programming/java/java46.html

  • インタフェースのstatic変数(Java)

    インナークラスは、 アウタークラスがないとインスタンス化出来ないのでstatic変数を持てない、 と聞いたのですが、 では、なぜ同じくインスタンス化出来ないインタフェースはstatic 変数を持てるのでしょう? 教えてください。

    • ベストアンサー
    • Java
  • C++のクラス内で、ウインドウプロシージャなどの・・・

    Visual C++ 2008で、Windowsフォームアプリケーションを作っています。 .NET Frameworkでは実現できないウインドウを作るために、WindowsAPIに頼り始めたのですが これが分からないのでとても不便な状態なのですが WindowsAPIで使うための、ウインドウプロシージャや、ウインドウハンドルや、デバイスコンテキストハンドル・・・等を C++のクラスの中で、staticを付けずに普通のメンバとして組み込む事は、出来るのでしょうか? - - - - - - 今までは分からなかったので、とりあえずAPIに触れてみようと思いstaticをつけてどうにかやっていたのですが、それだとクラス内のインスタンスメンバにアクセスできないので、クラス内に作ってる意味がない感じになってしまいます。

  • クラスについての質問です!!

    本に下のような説明があったのですが、ここで出てくる「メンバ」という言葉がわかりません。 これはどういう意味合いなのでしょうか? よろしくお願いします。 ――――――――――――――――――――――――――― public class JsMsg1{ public static void main (String args[ ]) { ・・・ } } というプログラムはJsMsgというクラスがあり、メンバとしてmain()メソッドがあり、フィールドはないというクラス構成をしています。

    • ベストアンサー
    • Java
  • クラスでスレッド作成

    VC++2008Express WIN32APIでRS232Cの通信用クラスを作成しています。 RS232Cの受信用スレッドを作成して 1ポートの受信処理をするようにはできます。 ですが ポート追加するたびにクラスをインスタンス化して受信用スレッドを 作成したいのですが、スレッド作成するには使用する変数などを staticにしないといけないため、クラスを複数インスタンス化できません。 どのような手法でクラスから複数スレッドを作成することができるのでしょうか? 分かりにくい説明ですが、参考になるものなどありましたら、 よろしくお願いします。

  • (クラス関連)staticキーワードの利用価値が分かりません。

    PHP4または5(どちらかというと、PHP5)の環境で作業をしています。 現在、クラスの扱い方の勉強をしていて、 少しずつ分かるようになってきてはいるのですが、 staticキーワードを使った静的メンバ、静的メソッドの考え方、利用価値が いまいちよく分かりません。 インスタンスすることにより、オブジェクトを生成し、 そこからクラス内のメンバ(プロパティ)や、メソッドを操作するのとは異なる!、 という仕様は分かるのですが、 「それが一体、なんなのょ。(笑)」 と思えてなりません。 どなたか、staticマスターがいらっしゃいましたら、 私の疑問を一刀両断して下さい。 お願い致します。

    • ベストアンサー
    • PHP
  • クラスのインスタンスって何者?

    データ用クラスのインスタンスなのですが、以前 「クラス名 利用名;」 で使うと毎回別のインスタンスを呼び出すらしく値が空になるトラブルが起き 「static クラス名 利用名;」 とすれば常に同じインスタンスになるからそれを使いなさいと教えられました。 以後ずっとこれを使ってきたのですが、 ヘッダーファイルAに記述したデータクラスを ソースファイルAで「static クラス名 利用名;」 ソースファイルBで「static クラス名 利用名;」 と利用名を完全に同じにしてもエラーが出ず(ソースのヘッダ領域なのに) ソースファイルAでそのデータクラスに入れたデータは ソースファイルBでは利用できず空になっていました。 極当たり前の何かを私はわかってないから こういうトラブルが起きているんだと思うのですが、 クラスのインスタンスって何者なんでしょうか? どうすれば複数のソースから1つのデータクラスを作り上げ 全体で利用できるように出来るのでしょうか?

  • クラス、インスタンスメソッドについて

    JAVA初心者です。 現在、先人が作ったプログラムの修正作業を行っておりますが、 以下の点に疑問があります。(因みに、先人はJAVAのスペシャリストではありません。) あるクラスが以下の様になっております。 public class Sample { private static Sample s = new Sample(); private Sample() { } /** クラスメンバに存在するインスタンス取得 * @return Sampleクラスの唯一のインスタンス */ public static Sample getInstance(){ return s; } public static void methodA(){ ... } } でこのmethodAを使用するには、以下の様にします。 Sample.getInstance().methodA() これはこれで納得で、うまく動作しますが、これは 結局の所、クラスメソッドにしたかったという事ではないのかな?と 疑問に感じています。つまり、単純に Sample.methodA と呼び出せばうまくいきます。 ところが、たまたまAPIドキュメントを見ていた所、Calendarクラスにもやはり getInstanceというものが存在し、現在日時を取得するのに Calendar.getInstance().getTime() の様に呼び出すと書いてありました。 Sampleクラス、JAVAのCalendarクラス(これに限った事では無いとは思いますが) のこれらのgetInstanceの効用とはなんなんでしょうか? ・クラスの外でnewでインスタンスを作り出さない所 ・それでいてクラスメソッドではない(?)所 この辺りについてご回答よろしくお願いします。

    • ベストアンサー
    • Java
  • 何のクラスでしょうか

    クラスの勉強をしています。 インスタンスがクラスを実体化したことまでは理解しましたが、 アプリケーション単位にインスタンスハンドルを持っているの意味が分かりません。 アプリケーションとは何のクラスを実体化したものなのでしょうか?

  • 「static宣言されているメンバ関数」は、「インスタンスメソッド」な

    「static宣言されているメンバ関数」は、「インスタンスメソッド」なのでしょうか? それとも、「クラスメソッド」なのでしょうか? 先日、下記内容で質問して、その時は分かったつもりだったのですが、 やっぱり分かってなかったようなので、教えてください。 ▽「クラス関数」「メンバ関数」「メソッド」の違いを教えてください。   http://okwave.jp/qa/q5858806.html 例) ▽前提 ・Aクラスのインスタンスa ・static宣言されたpublicメソッド「static_public_method」 ・static宣言されていないpublicメソッド「public_method」 ▽メンバ関数呼び出し ・$a->static_public_method() ・A::static_public_method() ・A::public_method() このとき、「$a->static_public_method()」は、インスタンス経由でアクセスすることになるので、 「インスタンスメソッド」になるのでしょうか。それとも、static(静的)宣言しているので、「クラスメソッド」になるのでしょうか? また、「A::static_public_method()」や、「A::public_method()」は、どちらになるのでしょうか? ※現在、頭の中がこんがらがっているのは、下記3点です。どれかひとつでも構わないので、分かりやすい考え方等あれば、ぜひ教えてください。 ・「static宣言したメンバ関数」は、「インスタンスメソッド」? 「クラスメソッド」? ・「スタティック」宣言してるのに、メンバ関数へ、「->(アロー演算子)」(オブジェクト経由)でアクセスできる理由 ・「A::static_public_method()」と「A::public_method()」の違い

    • ベストアンサー
    • PHP