//內部類可爲靜態,可用protected和private修飾 (而外部類只能使用public和缺省的包訪問權限)。
//內部類主要有如下幾類:成員內部類、局部內部類、靜態內部類、匿名內部類。 編程
//每一個內部類都能獨立地繼承自一個(接口的)實現,因此不管外圍類是否已經繼承了某個(接口的)實現,對於內部類都沒有影響。
//若是沒有內部類提供的能夠繼承多個具體的或抽象的類的能力,一些設計與編程問題就很難解決。
//從這個角度看,內部類使得多重繼承的解決方案變得完整。接口解決了部分問題,而內部類有效地實現了「多重繼承」。
public class InnerClass1 {
private static int i = 1;
private int j = 10;
private int k = 20; this
public static void outer_f1() {
} spa
public void outer_f2() {
} 設計
// 成員內部類中,不能定義靜態成員
// 成員內部類中,能夠訪問外部類的全部成員
class Inner {
// static int inner_is = 100; //內部類中不容許定義靜態變量
int j = 100; // 內部類和外部類的實例變量能夠共存
int inner_i = 1; 對象
void inner_f1() {
//在內部類中訪問內部類本身的變量直接用變量名
System.out.println(j);
// 在內部類中訪問內部類本身的變量也能夠用this.變量名
System.out.println(this.j); 繼承
//能夠訪問外部類的全部變量及方法
//在內部類中訪問外部類中與內部類同名的實例變量用 外部類名.this.變量名
System.out.println(InnerClass1.this.j);
// 若是內部類中沒有與外部類同名的變量,則能夠直接用變量名訪問外部類變量
System.out.println(k);
System.out.println(i);
outer_f1();
outer_f2();
}
} 接口
//外部類的非靜態方法訪問 成員內部類
public void outer_f3() {
Inner inner = new Inner();
inner.inner_f1();
} class
//外部類的靜態方法訪問 成員內部類,分三個步驟《與在外部類外部訪問成員內部類同樣》
public static void outer_f4() {
// step1 創建外部類對象
InnerClass1 out = new InnerClass1();
// step2 根據外部類對象創建內部類對象
Inner inner = out.new Inner();
// step3 訪問內部類的方法
inner.inner_f1();
} 變量
public static void main(String[] args) {
InnerClass1.outer_f4();
// 成員內部類必須使用此外圍類的一個對象來建立其內部類的一個對象:會引用建立它的外圍對象
//若是你用的是靜態的內部類,那就不須要對其外圍類對象的引用。
InnerClass1 out = new InnerClass1();
InnerClass1.Inner outin = out.new Inner();//前面要不要前綴均可以。
Inner outin1 = out.new Inner();//前面要不要前綴均可以。
outin.inner_f1();
}
} 權限