よくわからないことを調べて解説してみるブログ。
2015
・内部クラスのことをネステッドクラスと呼ぶ
・最上位のネストされていないクラスをトップレベルクラスと呼ぶ
・外部クラスから内部クラスのインスタンス変数へのアクセスは不可能。
・内部クラスから外部クラスメンバのアクセス方法は、
インスタンスメソッド内では、外部クラス名.this.メンバメソッドまたはメンバ変数
・内部クラスのstaticメンバ変数はfinal修飾子が必須。
・内部クラスにstaticメソッドは定義できない
(staticメソッドは、トップレベルクラスにのみ定義可能。)
上記ゆえに
・インスタンス化する内部クラスは外部クラスのインスタンス化を前提にしている
・thisは相対的な自身を指している
・最上位のネストされていないクラスをトップレベルクラスと呼ぶ
・外部クラスから内部クラスのインスタンス変数へのアクセスは不可能。
・内部クラスから外部クラスメンバのアクセス方法は、
インスタンスメソッド内では、外部クラス名.this.メンバメソッドまたはメンバ変数
・内部クラスのstaticメンバ変数はfinal修飾子が必須。
・内部クラスにstaticメソッドは定義できない
(staticメソッドは、トップレベルクラスにのみ定義可能。)
上記ゆえに
・インスタンス化する内部クラスは外部クラスのインスタンス化を前提にしている
・thisは相対的な自身を指している
public class SameValInnerClassAndOuterClass { static final int sttnum = 3; int num = 0; void printNum() { System.out.println("-----------------Outer Class--------------------"); System.out.println(num); // 0 System.out.println(this.num);// ここでのthisは、外部クラスを指す。 // 0 System.out.println(SameValInnerClassAndOuterClass.this.num); // 0 System.out.println(sttnum); // 3 System.out.println(InnerClass.sttnum); // 2 System.out.println(SameValInnerClassAndOuterClass.sttnum); // 3 System.out.println(SameValInnerClassAndOuterClass.InnerClass.sttnum); // 2 // this.printNum(); // 当然無限ループ // this.new InnerClass().printNum(); // 当然無限ループ } class InnerClass { static final int sttnum = 2; // 内部クラスでは、static変数はfinal修飾子が必須。 // static int getSttnum() { return sttnum;} // コンパイルエラー。staticメソッドはトップレベルクラスにのみ定義可能。 int num = 1; void printNum() { System.out.println("-----------------Inner Class--------------------"); System.out.println(num); // 1 System.out.println(this.num);// ここでのthisは、内部クラスを指す。 // 1 System.out.println(SameValInnerClassAndOuterClass.this.num); //内部クラスを保持する外部クラスのメンバへはアクセス可能。 // 0 System.out.println(sttnum); // 2 System.out.println(InnerClass.sttnum); // 2 System.out.println(SameValInnerClassAndOuterClass.InnerClass.sttnum); // 2 SameValInnerClassAndOuterClass.this.printNum(); // 内部クラスを保持する外部クラスへのメンバへはアクセス可能。 System.out.println("-----------------Inner Class--------------------"); System.out.println(SameValInnerClassAndOuterClass.sttnum); // 3 // SameValInnerClassAndOuterClass.printNum(); // static参照になるため、コンパイルエラー。 // this.printNum(); // 当然無限ループ } } public static void main(String[] args) { SameValInnerClassAndOuterClass outerClass = new SameValInnerClassAndOuterClass(); InnerClass innerClass = outerClass.new InnerClass(); outerClass.printNum(); innerClass.printNum(); // System.out.println(SameValInnerClassAndOuterClass.this.num); // staticコンテキストではthisを利用できないと言われる。 } } class TopLevel { static void TopLevelMethod(){ // staticメソッドは、トップレベルクラスにのみ定義可能。 } }実行結果
-----------------Outer Class--------------------0003232-----------------Inner Class--------------------110222-----------------Outer Class--------------------0003232-----------------Inner Class--------------------3
PR
Post your Comment
プロフィール
HN:
たんてーくん
性別:
非公開
最新記事
(03/29)
(03/29)
(06/26)
(05/21)
(04/23)
カテゴリー
最新CM
[09/25 http://2017.bblbuy.com]
[09/24 http://www.japanform.com]
[09/23 http://www.japanform.com]
[09/22 http://www.japanform.com]
[09/21 http://2017.bblbuy.com]
ブログ内検索