什麼是內部類
將類寫在其他類的內部,可以寫在其他類的成員位置或局部位置,這種寫在其他類內部的類就稱爲內部類。其他類也稱爲外部類。
什麼時候使用內部類
在描述事物時,若一個事物內部還包含其他可能包含的事物,比如在描述汽車時,汽車中還包含有發動機,這時發動機就可以使用內部類來描述。
class 汽車 { //外部類
class 發動機 { //內部類
}
}
內部類的分類
內部類分爲成員內部類與局部內部類。
我們定義內部類時,就是一個正常定義類的過程,同樣包含各種修飾符、繼承與實現關係等。在內部類中可以直接訪問外部類的所有成員。
成員內部類
成員內部類,定義在外部類中的成員位置。與類中的成員變量相似,可通過外部類對象進行訪問
定義格式
class 外部類 {
修飾符 class 內部類 {
//其他代碼
}
}
訪問方式
外部類名.內部類名 變量名 = new 外部類名().new 內部類名();
例:
定義外部類與內部類
class Body {//外部類,身體
private boolean life= true; //生命狀態
public class Heart { //內部類,心臟
public void jump() {
System.out.println("心臟噗通噗通的跳")
System.out.println("生命狀態" + life); //訪問外部類成員變量
}
}
}
使用:
public static void main(String[] args) {
//創建內部類對象
Body.Heart bh = new Body().new Heart();
//調用內部類中的方法
bh.jump();
}
局部內部類
局部內部類,定義在外部類方法中的局部位置。與訪問方法中的局部變量相似,可通過調用方法進行訪問
定義格式
class 外部類 {
修飾符 返回值類型 方法名(參數) {
class 內部類 {
//其他代碼
}
}
}
訪問方式
在外部類方法中,創建內部類對象,進行訪問
局部內部類代碼演示
定義類
class Party {//外部類,聚會
public void puffBall(){// 吹氣球方法
class Ball {// 內部類,氣球
public void puff(){
System.out.println("氣球膨脹了");
}
}
//創建內部類對象,調用puff方法
new Ball().puff();
}
}
訪問內部類
public static void main(String[] args) {
//創建外部類對象
Party p = new Party();
//調用外部類中的puffBall方法
p.puffBall();
}
匿名內部類概念
內部類是爲了應對更爲複雜的類間關係。查看源代碼中會涉及到,而在日常業務中很難遇到,這裏不做贅述。
最常用到的內部類就是匿名內部類,它是局部內部類的一種。
定義的匿名內部類有兩個含義:
臨時定義某一指定類型的子類
定義後即刻創建剛剛定義的這個子類的對象
定義匿名內部類的作用與格式
作用:匿名內部類是創建某個類型子類對象的快捷方式。
格式:
new 父類或接口(){
//進行方法重寫
};
代碼演示
//已經存在的父類:
public abstract class Person{
publicabstract void eat();
}
//定義並創建該父類的子類對象,並用多態的方式賦值給父類引用變量
Person p = new Person(){
publicvoid eat() {
System.out.println(“我吃了”);
}
};
//調用eat方法
p.eat();
使用匿名對象的方式,將定義子類與創建子類對象兩個步驟由一個格式一次完成。雖然是兩個步驟,但是兩個步驟是連在一起完成的。
匿名內部類如果不定義變量引用,則也是匿名對象。代碼如下:
new Person(){
publicvoid eat() {
System.out.println(“我吃了”);
}
}.eat();