介紹這個匿名內部類之前,建議大家看一下我的另外一個博客《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類