http://www.geocities.jp/healthyhus/txt/java/j09innerclass.html
ひとりで喫むjavaコーヒー(innerclass)
URLのページに直接このことが書いてあるわけではないのですが……
例えば私はこのように書いたことがあります。
public class SampleOuterClass extends BlurBlur {
private SampleOuterClass selfSampleOuterClass = this;
void methodToCall(){
// ……色々と略……
}
// ……色々と略……
class SampleInnerClass{
void dummyMethod(){
selfSampleOuterClass.methodToCall(); // ***
}
}
}
みそは、内部クラスからアクセスする外部クラスのメンバ(ここでは selfSampleOuterClass)を用意して、
明示化する、という点です。
そのメンバは、実は外部クラスのインスタンス自身を指しているわけです。
私はこのやり方が好きです。
内部クラスが入ってくると、
自分自身を引数に渡したい、なんてときにも、
this を使って頭がこんがらがるより、
こいつで解決すれば、気分が良いこともあります(笑
ありがとうございます。
実はどうしても方法が見つからなかったので仮にそうしています。(^^;;
余計な変数を宣言しなくてはならなくてスマートでないので、もっと良い方法が無いのかと思っています。
やはりこの方法しかないのでしょうか?
2番目のサンプルコードを見てください。
内部クラスからは、
outsideClass.this.foo();
というやり方で出来るようです。
おお、この回答をまっていました。
ありがとうございます。
Ask.jp
class Outer {
void foo(){
}
class Inner {
void foo() {
}
//ここから下が回答です。
void bar() {
foo(); //Inner#foo()のこと
Outer.this.foo(); //Outer#fooのこと
}
}
}
Outer.thisの形式は覚えておくと色々使えます。
ありがとうございます。
そうではなくて内部(匿名、非匿名にかかわらず)クラスと外部(包んでいるクラス)のメソッドが重複してしまったとき、外部クラスのメソッドを内部クラスから呼び出す方法を知りたいのですが。