iT邦幫忙

2022 iThome 鐵人賽

DAY 28
0

內部類別(Inner Class)
定義在另一個類別內部的類別稱為巢狀類別(Nested Class),未被宣告static的稱為內部類別,宣告為static的稱為靜態巢狀類別。

Class 類別名稱{
	//內容
	Class 類別名稱{
		//內容
	}
}

裡面的為內部類別,外面的稱為外部(Outter)類別。內部類別可以直接存取外部類別的所有成員。

//書籍範例
package com.mycompany.testnine;

class Outter{
    private int i=1,j=2;
    static int k=3;
    
    class Inner{
        int j=4,k=5;
        void print(){
            System.out.print(i);
            System.out.print(Outter.this.j);
            System.out.print(Outter.k);
            System.out.println(j);
        }
    }
    void callInner(){
        Inner in=new Inner();
        in.print();
    }
}

public class testNine {
    public static void main(String[] args) {
        Outter or= new Outter();
        or.callInner();
        Outter.Inner ir = or.new Inner();
        ir.print();
    }
}

Inner in=new Inner();
在callInner中先建立內部物件,才能用來呼叫內部類別的方法

Outter.Inner ir = or.new Inner();
用外部物件建立內部物件

Outter.k
在內部類別要呼叫外部類別的靜態變數時,要加上外部類別的名稱

Outter.this.j
實體變數還要加上this才能存取。
https://ithelp.ithome.com.tw/upload/images/20221013/20152201fqTy45Dky6.png

匿名類別(Anonymous Class)
匿名類別用來臨時定義一個類別或介面的子類別來產生物件,因為用完就不需要了,所以不用指定名稱。

New 父類別或介面名稱{
	//內容
}
package com.mycompany.testten;

interface Face{
    void hello();
}
public class testTen {
    public static void main(String[] args) {
        final int a=10;
        
        Face h = new Face() {
            public void hello(){
                System.out.println("hello!");
            }
        };
        h.hello();
    }
}

以匿名方式實作Face介面及產生物件。

https://ithelp.ithome.com.tw/upload/images/20221013/20152201HwZmka22FE.png

靜態巢狀類別(Static Nested Class)
可直接使用「外部類別.內部類別名稱」,存去內部類別的靜態成員,或直接建立內部物件。

參考資料:
最新java程式語言第六版


上一篇
抽象類別及介面
下一篇
套件
系列文
大學每日任務:攝取新知識及學習紀錄30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言