A:內部類java
在類中定義的類就是內部類this
B:內部類訪問特色
a:內部類能夠直接訪問外部類的成員,包括私有。緣由是:他能獲取到外部類名的引用 外部類名.this
b:外部類要訪問內部類的成員,必須建立對象。spa
c:外部類名.內部類名 對象名 = 外部類對象.內部類對象;code
Outer.Inner in = new outer().new Inner()
對象
public class Demo1_InnerClass { public static void main(String[] args){ #建立類的對象 Outer.Inner in = new Outer().new Inner(); in.method(); } } #定義外部類Outer以及內部類Inner class Outer{
#外部類的私有成員變量
private int num = 10; class Inner{ public void method(){ System.out.println(num); } } }
注意一:若是內部類被私有,那麼就得在外部類中提供一個調用私有類的方法blog
public class Demo1_InnerClass { public static void main(String[] args){ Outer o = new Outer(); o.print(); } } class Outer{ private int num = 10; #內部類被私有化 private class Inner{ public void method(){ System.out.println(num); } } #定義一個能夠調用私有內部類的方法 public void print(){ Inner i = new Inner(); i.method(); } }
注意二:若是內部類是靜態的,調用方法直接是:外部類名.內部類名 對象名 = 外部類名.內部類對象(由於static修飾的能夠直接用類名.調用),若是靜態內部類裏面的方法也是靜態的,直接就用類名調用就能夠了class
class Outer{ private int num = 10; static class Inner{ public void method(){ System.out.println("method"); } public static void print(){ System.out.println("print"); } } } public class Demo1_InnerClass { public static void main(String[] args){ Outer.Inner oi = new Outer.Inner(); oi.method(); Outer.Inner.print(); } }
注意三:若是想直接訪問外部類的成員變量,那麼就是Outer.this
class Outer {
public int num = 10;
class Inner {
public int num = 20;
public void show() {
int num = 30;
System.out.println(num); #輸出30,就近原則
System.out.println(this.num); #輸出20,調用本類成員變量
System.out.println(Outer.this.num); #輸出10,獲取外部類引用
}
}
}變量