內(nèi)部類
定義:每個(gè)內(nèi)部類都能獨(dú)立地繼承一個(gè)(接口的)實(shí)現(xiàn),所以無論外圍類是否已經(jīng)繼承了某個(gè)(接口的)實(shí)現(xiàn),對于內(nèi)部類都沒有影響。
特性:
- 內(nèi)部類可以用多個(gè)實(shí)例,每個(gè)實(shí)例都有自己的狀態(tài)信息,并且與其他外圍對象的信息相互獨(dú)立。
- 在單個(gè)外圍類中,可以讓多個(gè)內(nèi)部類以不同的方式實(shí)現(xiàn)同一個(gè)接口,或者繼承同一個(gè)類。
- 創(chuàng)建內(nèi)部類對象的時(shí)刻并不依賴于外圍類對象的創(chuàng)建。
- 內(nèi)部類提供了更好的封裝,除了該外圍類,其他類都不能訪問。
例如:
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)系的)。對于一個(gè)名為OuterClass的外圍類和一個(gè)名為InnerClass的內(nèi)部類,在編譯成功后,會(huì)出現(xiàn)這樣兩個(gè)class文件:OuterClass.class和OuterClass$InnerClass.class
類別:內(nèi)部類主要分為成員內(nèi)部類、局部內(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成員變量和方法。