• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:(クラス名.this.メソッド)って・・・?)

(クラス名.this.メソッド)って・・・?

このQ&Aのポイント
  • (クラス名.this.メソッド)とは、Javaの特殊な構文の一つで、インナークラス内で外部クラスのメソッドを呼び出すための方法です。
  • クラスA内で定義されているインナークラスClassIのメソッド内で、ClassA.this.MethodA()と書かれている部分は、ClassAのメソッドMethodAを呼び出しています。
  • インナークラスは、外部クラスのインスタンスからのみ生成できます。他のクラスからは直接インナークラスを生成することはできません。

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

  • ベストアンサー
  • nagata
  • ベストアンサー率33% (10/30)
回答No.2

this というのは通常自分自身を指す参照ですが、インナークラスの場合 自分を保持している親にアクセスするときも this を使います。で、 自分自身を指すthisと親を指すthisを区別するために 親のクラス名.this という書き方をします。インナークラスが入れ子になっているときもこの 方法で好きな親に一発でアクセスできます。 なのでClassA.thisは構築Aで生成されたインスタンスであってます。 インナークラスは親クラスを必要とします。なぜわざわざクラスの中にまた クラスを書くなどと言うややっこしいことをするのかというとインナークラス が親クラスを知っている必要があるからです。(親を必要としていない場合は 親の外で定義しましょう) で、インナークラスは暗に親の参照を持っていることになります(多分)。 この辺は予想ですがその関係で親のわからないインナークラスは生成出来ない んじゃないでしょうか。(javaは参照の初期化を強要する言語です。)つまり 他のクラスからはインナークラスのインスタンスを生成できないと思います。 本来は他のクラスからインナークラスを生成する必要性もないはずです。 以上の話はちゃんと調べたわけではないので間違っているかもしれませんが おおむねあっていると思います。

bluesky
質問者

お礼

ありがとうございます なるほど! 大変参考になりました (クラス・this)という記述が不気味で仕方なかったのです (私の読んでる参考書にも書いてなかったので・・・) Javaをはじめたのが一昨年の夏でそのころはまだ swingが出たばかりでした 最近になってまたJavaをやり始めたんですが あちこち仕様が変わって 驚いてます 当時のプログラムはJDK1.3では動かないし・・・ Javaの仕様ってまだかたまってないんでしょうか・・・

その他の回答 (1)

  • nagata
  • ベストアンサー率33% (10/30)
回答No.1

コピーして試してみたところ、コンパイルが通りません。 public class ClassA { public static void main(String[]args) { new ClassA(); /* 構築A */ } public ClassA() { new ClassI(); } class ClassI { public class ClassI() { ClassA.this.MethodA(); /* 命令A */ } } public void MethodA() { System.out.println("HELLO"); } } だと思うんですけど,そう考えて良いのでしょうか。

bluesky
質問者

補足

そうです もうしわけありません あわてて書いたので間違えてしまいました

関連するQ&A