內(nèi)部類
定義:每個(gè)內(nèi)部類都能獨(dú)立地繼承一個(gè)(接口的)實(shí)現(xiàn)练慕,所以無(wú)論外圍類是否已經(jīng)繼承了某個(gè)(接口的)實(shí)現(xiàn)从铲,對(duì)于內(nèi)部類都沒(méi)有影響澜建。
特性:
- 內(nèi)部類可以用多個(gè)實(shí)例赶撰,每個(gè)實(shí)例都有自己的狀態(tài)信息扣囊,并且與其他外圍對(duì)象的信息相互獨(dú)立。
- 在單個(gè)外圍類中骂澄,可以讓多個(gè)內(nèi)部類以不同的方式實(shí)現(xiàn)同一個(gè)接口惕虑,或者繼承同一個(gè)類。
- 創(chuàng)建內(nèi)部類對(duì)象的時(shí)刻并不依賴于外圍類對(duì)象的創(chuàng)建琳猫。
- 內(nèi)部類提供了更好的封裝脐嫂,除了該外圍類紊遵,其他類都不能訪問(wèn)暗膜。
例如:
public class OuterClass {
private String name;
private int age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
} public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public class InnerClass {
public InnerClass() {
name = "chenssy";
age = 23;
}
public void display() {
System.out.println("name:" + getName() + " ;age:" + getAge());
}
}
public static void main(String[] args) {
OuterClass outerClass = new OuterClass();
OuterClass.InnerClass innerClass = outerClass.new InnerClass();
innerClass.display();
}
}
編譯:內(nèi)部類是個(gè)編譯時(shí)的概念学搜,一旦編譯成功后,它就與外圍類屬于兩個(gè)完全不同的類(當(dāng)然他們之間還是有聯(lián)系的)聚磺。對(duì)于一個(gè)名為OuterClass的外圍類和一個(gè)名為InnerClass的內(nèi)部類钉凌,在編譯成功后,會(huì)出現(xiàn)這樣兩個(gè)class文件:OuterClass.class和OuterClass$InnerClass.class
類別:內(nèi)部類主要分為成員內(nèi)部類矢沿、局部?jī)?nèi)部類闽坡、匿名內(nèi)部類疾嗅、靜態(tài)內(nèi)部類
注意:
- 第一:成員內(nèi)部類中不能存在任何static的變量和方法;
- 第二:成員內(nèi)部類是依附于外圍類的,所以只有先創(chuàng)建了外圍類才能夠創(chuàng)建內(nèi)部類。
靜態(tài)內(nèi)部類:
使用static修飾的內(nèi)部類稱之為靜態(tài)內(nèi)部類。
1香伴、 它的創(chuàng)建是不需要依賴于外圍類的乡洼。
2、 它不能使用任何外圍類的非static成員變量和方法。