問: 什麼是内部類?
答: 内部類(Inner Class)就是在一個類的内部再定義一個類,與之對應包含内部類的類被稱為外部類。
問: 為什麼要将一個類定義在另外一個類内部呢?
答: 内部類主要作用如下:
- 内部類提供了更好的封裝,可以被内部類隐藏在外部類之内,不允許同一個包中的其他類通路該類。
- 内部類的方法可以直接通路外部類的所有資料,包括Private資料。
- 内部類所有實作的功能,使用外部類同樣可以實作,隻是有時候使用内部類更友善。
問: 内部類有幾種?
答: 内部類可以分為以下幾種:
- 成員内部類
- 靜态内部類
- 方法内部類
- 匿名内部類
1、靜态内部類不能直接通路外部類的 非靜态成員,但可以通過 new 外部類().成員 的方式通路。
2、如果外部類的 靜态成員 與内部類的 成員 名稱相同,可以通過“外部類.靜态成員”的方式通路。
3、建立靜态内部類的對象時,不需要外部類的對象,可以直接建立:内部類 對象名 = new 内部類()
示例代碼:
public class Outer {
private int a = 11;
static int b = 22;
int c = 33;
// 成員内部類
public class Inner {
public void test() {
System.out.println("通路外部類中的a:" + Outer.this.a);
System.out.println("通路外部類中的b:" + Outer.b);
System.out.println("通路外部類中的c:" + c);
}
}
// 靜态内部類
public static class SInner {
public void test() {
System.out.println("通路外部類中的a:" + new Outer().a);
System.out.println("通路外部類中的a:" + b);
System.out.println("通路外部類中的a:" + new Outer().c);
}
}
// 成員内部類
public void Show() {
int score = 88;
class SInner {
public int getScore() {
return score + 10;
}
}
// 建立方法内部類的對象
SInner si = new SInner();
System.out.println("調用方法内部類的score:" + si.getScore());
}
public static void main(String[] args) {
// 建立成員内部類的對象時,需要通過外部類的對象 out.new來建立 内部類對象
Outer out = new Outer();
Inner in = out.new Inner();
in.test();
// 建立靜态内部類的對象時,可以直接建立内部類對象
SInner si = new SInner();
si.test();
// 調用方法
out.Show();
}
}