- ベストアンサー
(クラス名.this.メソッド)って・・・?
- (クラス名.this.メソッド)とは、Javaの特殊な構文の一つで、インナークラス内で外部クラスのメソッドを呼び出すための方法です。
- クラスA内で定義されているインナークラスClassIのメソッド内で、ClassA.this.MethodA()と書かれている部分は、ClassAのメソッドMethodAを呼び出しています。
- インナークラスは、外部クラスのインスタンスからのみ生成できます。他のクラスからは直接インナークラスを生成することはできません。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
this というのは通常自分自身を指す参照ですが、インナークラスの場合 自分を保持している親にアクセスするときも this を使います。で、 自分自身を指すthisと親を指すthisを区別するために 親のクラス名.this という書き方をします。インナークラスが入れ子になっているときもこの 方法で好きな親に一発でアクセスできます。 なのでClassA.thisは構築Aで生成されたインスタンスであってます。 インナークラスは親クラスを必要とします。なぜわざわざクラスの中にまた クラスを書くなどと言うややっこしいことをするのかというとインナークラス が親クラスを知っている必要があるからです。(親を必要としていない場合は 親の外で定義しましょう) で、インナークラスは暗に親の参照を持っていることになります(多分)。 この辺は予想ですがその関係で親のわからないインナークラスは生成出来ない んじゃないでしょうか。(javaは参照の初期化を強要する言語です。)つまり 他のクラスからはインナークラスのインスタンスを生成できないと思います。 本来は他のクラスからインナークラスを生成する必要性もないはずです。 以上の話はちゃんと調べたわけではないので間違っているかもしれませんが おおむねあっていると思います。
その他の回答 (1)
- nagata
- ベストアンサー率33% (10/30)
コピーして試してみたところ、コンパイルが通りません。 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"); } } だと思うんですけど,そう考えて良いのでしょうか。
補足
そうです もうしわけありません あわてて書いたので間違えてしまいました
お礼
ありがとうございます なるほど! 大変参考になりました (クラス・this)という記述が不気味で仕方なかったのです (私の読んでる参考書にも書いてなかったので・・・) Javaをはじめたのが一昨年の夏でそのころはまだ swingが出たばかりでした 最近になってまたJavaをやり始めたんですが あちこち仕様が変わって 驚いてます 当時のプログラムはJDK1.3では動かないし・・・ Javaの仕様ってまだかたまってないんでしょうか・・・