Java學習里程-----Java基礎_22 Java內部類

介紹這個匿名內部類之前,建議大家看一下我的另外一個博客《Java學習里程-----Java基礎_21定時器》因爲這一篇博客是承上啓下的。

在學習定時器的時候,我們遇到了一個匿名內部類,我只是說了這個東西叫做匿名內部類,並沒有具體講講這個東西,下面我開始細說

一、什麼是匿名內部類

所謂匿名,就是沒有名字,無名。內部類呢,是說一個類定義在了另外一個類裏面,或者是另外一個類裏面的方法中,我們將這個類稱爲內部類

擴展:Java中不止有一種內部類哦,剩下三個是:成員內部類,局部內部類,靜態內部類

我們挨個說一下,見識一下內部類

二、成員內部類

首先是第一個,成員內部類,我們來看看這傢伙長啥樣,我來舉個栗子

// 以下爲僞代碼,不可使用!!!
public class 麪糰 {
    private int size = 10;

    // 成分
    public String chengfen = "玉米麪";

    // 構造方法
    public 麪糰(String chengfen) {
        this.chengfen = chengfen;
    }

    public class 餡 {
        public void say(){
            System.out.println("我是餡料,我在麪糰裏面,我是成員內部類");
        }
    }
}

是吧,用喫得舉栗子是最好的,麪糰裏面呢,有一個成員內部類 : 餡!

簡單明瞭!

成員內部類是最普通的內部類,我反正是老常會用到這樣的結構,也不少見啊,要知道這樣的結構,別到時候見到了,一臉懵。這種內部類呢,麪糰被叫做外部類,餡是內部類,而內部類可以無條件的訪問外部類的所有成員屬性和方法,包括靜態成員變量、和private成員變量),也就是說啊,餡可以知道是什麼皮包的它,也知道這個皮是多大的。

不過要注意的是,當成員內部類擁有和外部類同名的成員變量或者方法時,會發生隱藏現象,即默認情況下訪問的是成員內部類的成員。如果要訪問外部類的同名成員,需要用麪糰.this.餡的成員變量或者方法

而外部類訪問內部類的時候,需要實例化內部類,然後進行訪問。

三、局部內部類

局部內部類是說,在一個正常的類中,有一個方法或者一個作用域,在這個方法或者作用域中存在一個類,這個類就是局部內部類。

它和上面的成員內部類區別在於,局部內部類只能在這個方法或者作用域中被使用,其他地方是絕對用不到的。

我們來看一下這個例子

// 以下都是僞代碼!!!

public class 食材{
    
}

public class 玉米麪 extends 食材{
    

    public 食材 和麪{
        class 水 extends 食材 {
            System.out.println("我是水,我可以把麪粉揉和在一起");
        }
        System.out.println("有了水,哈哈哈哈");

        水 H20 = new 水();
        return H20.add玉米麪;
    }
}

這個我是很少見到,很少,但是也能這麼來操作。

四、匿名內部類

這個就是我這個文章最最最開頭說的那個東西,我們來看一下

ps:這個是我們平時開發時候經常可以用到的,也是最常見的內部類,要好好學習這個,當然,其他的也要好好學習!!

我們不寫例子了,直接看java.util.TimerTask 這個類

我們會發現,這個玩意首先是一個抽象類,然後我們往下翻看,它定義了很多的變量

當然,上面有註釋,你就會知道這個變量是幹啥的,不會翻譯可以直接Google,方便。《Google翻譯》

別翻得太過了,大約在92行,

你會看到這個run方法

這個就是我們那天學習定時器時出現的run,是的沒有錯,就是它!

這個匿名內部類之所以用的多,也是有它的優點的,這玩意方便維護,而且寫得也方便,省的弄好多類,來回繼承,來回實現,寫到後面腦袋都大了。

擴展:匿名內部類是唯一一種沒有構造器的類。

五、靜態內部類

靜態內部類就是成員內部類,只不過是用static來修飾的

靜態內部類的實例化,是不需要依賴外部類的,也就是說,直接可以實例化使用。

而且它不能使用外部類的非static修飾的東西(成員變量或者方法),其實理解起來很容易,你說你想創建就創建了,如果再讓你訪問你外部類的非static成員,那就亂套了,不實例化對象是沒有辦法用它裏面的方法啊啥的,現在只要弄個靜態內部類就能去訪問,那不就炸了。

 

完。

下一節,我們開始講述Java 的io類

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章