非靜態(tài)內(nèi)部類的使用
/**
* 測試非靜態(tài)內(nèi)部類的使用
* 內(nèi)部類分為成員內(nèi)部類、匿名內(nèi)部類和局部內(nèi)部類,成員內(nèi)部類分為非靜態(tài)內(nèi)部類和靜態(tài)內(nèi)部類
* 編譯后內(nèi)部類和外部類會分成兩個class文件 外部類名.class和 外部類名$內(nèi)部類名.class
*/
public class Outer1 {
? ?private int age = 5;
? ?public void pr(){
? ? ? ?System.out.println("Outer.pr");
? ? ? ?System.out.println(age);
? ?}
? ?public int speed = 20;
? ?public class Inner1{
? ? ? ?//內(nèi)部類四種封裝都可以使用
? ? ? ?int age = 12;
? ? ? ?public void pr(){
? ? ? ? ? ?System.out.println("Inner.pr");
? ? ? ? ? ?System.out.println(age);
? ? ? ? ? ?//調(diào)用的是Inner1的age 即this.age
? ? ? ? ? ?System.out.println(Outer1.this.age);
? ? ? ? ? ?//調(diào)用Outer1的age this不可省略
? ? ? ? ? ?Outer1.this.pr();
? ? ? ? ? ?//調(diào)用Outer1的pr()方法 this不可省略
? ? ? ? ? ?System.out.println(speed);
? ? ? ? ? ?//內(nèi)部類中沒有定義speed時會調(diào)用 Outer1.this.speed
? ? ? ?}
? ?}
}
public class TestInner {
? ?public static void main(String[] args) {
? ? ? ?Outer1 o1 = new Outer1();
? ? ? ?Outer1.Inner1 i1 = new Outer1().new Inner1();
? ? ? ?//內(nèi)部類對象需要通過外部類對象new
? ? ? ?//外部類.內(nèi)部類
? ? ? ?//非靜態(tài)內(nèi)部類就像外部類的成員變量 需要通過外部類的對象調(diào)用 必須用對象調(diào)對象
? ? ? ?i1.pr();
? ?}
}