參考文章
爲什麼需要 Java內部類
- 1 每個內部類都能獨立的繼承一個接口的實現,所以無論外部類是否已經繼承了某個(接口的)實現,對於內部類都沒有影響。內部類使得多繼承的解決方案變得完整
- 2 方便將存在一定邏輯關係的類組織在一起,又可以對外界隱藏
- 3 方便編寫事件驅動程序
- 4 方便編寫線程代碼
1 根據註釋填寫 1 2 3 處的代碼
public class Test {
public static void main(String[] args) {
// 初始化 Bean1
(1)
bean1.I++;
// 初始化 Bean2
(2)
bean2.J++;
//初始化Bean3
(3)
Bean.Bean3 bean3 = bean.new Bean3();
}
class Bean1{
public int I = 0;
}
static class Bean2{
public int J = 0;
}
}
public class Bean {
class Bean3{
public int K = 0;
}
}
創建靜態內部類****對象的一般形式爲:
外部類類名.內部類類名 xxx = new 外部類類名.內部類類名()
創建成員內部類****對象的一般形式爲:外部類類名.內部類類名 xxx = 外部類對象名.new 內部類類名()
Test test = new Test();
Test.Bean1 bean1 = test.new Bean1();
Test.Bean2 b2 = new Test.Bean2();
Bean bean = new Bean();
Bean.Bean3 bean3 = bean.new Bean3();
2.下面這段代碼的輸出結果是什麼
public class Test {
public static void main(String[] args) {
Outter outter = new Outter();
outter.new Inner().print();
}
}
class Outter{
private int a = 1;
class Inner {
private int a = 2;
public void print() {
int a = 3;
System.out.println("局部變量:" + a);
System.out.println("內部類變量:" + this.a);
System.out.println("外部類變量:" + Outter.this.a);
}
}
}
答案: 3 2 1
最後補充一點知識:關於成員內部類的繼承問題。
一般來說,內部類是很少用來作爲繼承用的。但是當用來繼承的話,要注意兩點:
- 成員內部類的引用方式必須爲 Outter.Inner.
- 構造器中必須有指向外部類對象的引用,並通過這個引用調用super() — Java編程思想
class WithInner {
class Inner{
}
}
class InheritInner extends WithInner.Inner {
// InheritInner() 是不能通過編譯的,一定要加上形參
InheritInner(WithInner wi) {
wi.super(); //必須有這句調用
}
public static void main(String[] args) {
WithInner wi = new WithInner();
InheritInner obj = new InheritInner(wi);
}
}