內部類和匿名內部類
阿新 • • 發佈:2020-11-03
目錄
1. 內部類
1.1 概述
將一個類A定義在另一個類B裡面,裡面的那個類A就稱為內部類,B則稱為外部類
1.2 成員內部類
定義在類中方法外的類,稱為成員內部類。
定義格式
class 外部類 {
class 內部類{
}
}
在描述事物時,若一個事物內部還包含其他事物,就可以使用內部類這種結構。比如,汽車類 Car 中包含發動機 類 Engine ,這時, Engine 就可以使用內部類來描述,定義在成員位置。
訪問特點:
- 內部類可以直接訪問外部類的成員,包括私有成員。
- 外部類要訪問內部類的成員,必須要建立內部類的物件
程式碼舉例:
class Car { //外部類
class Engine { //內部類
}
}
//建立成員內部類物件格式:外部類名.內部類名 物件名 = new 外部型別().new 內部型別();
1.3 匿名內部類
匿名內部類是內部類的簡化寫法。它的本質是一個 帶具體實現的父類或者父介面的匿名的 子類物件。 開發中,最常用到的內部類就是匿名內部類了。
以介面舉例,當你使用一個介面時,似乎得做如下幾步操作:
- 定義子類
- 重寫介面中的方法
- 建立子類物件
- 呼叫重寫後的方法
我們的目的,最終只是為了呼叫方法,那麼能不能簡化一下,把以上四步合成一步呢?匿名內部類就是做這樣的快 捷方式。
前提:匿名內部類必須繼承一個父類或者實現一個父介面。
匿名內部類使用格式:
new 父類名或者介面名(){
// 方法重寫
@Override
public void method() {
// 執行語句
}
};
實現一個介面的使用方式:
1.定義一個介面
public abstract class FlyAble{
public abstract void fly();
}
2.建立一個匿名內部類並呼叫
public static void main(String[] args) { /* 1.等號右邊:是匿名內部類,定義並建立該介面的子類物件 2.等號左邊:是多型賦值,介面型別引用指向子類物件 */ FlyAble f = new FlyAble(){ public void fly() { System.out.println("我飛了~~~"); } }; //呼叫 fly方法,執行重寫後的方法 f.fly(); }
方法的形式引數是介面或者抽象類的使用方式:
public static void main(String[] args) {
/*
建立匿名內部類,直接傳遞給showFly(FlyAble f)
*/
showFly( new FlyAble(){
public void fly() {
System.out.println("我飛了~~~");
}
});
}
public static void showFly(FlyAble f) {
f.fly();
}