We believe that writing is about content, about what you want to say – not about fancy formatting.
我們堅信寫作寫的是內容,所思所想,而不是花樣格式。
— Ulysses for Mac
Java第8天上午
上午主要做了三個練習:
拓展閱讀:
下午主要復習了內部類:
內部類(innerclasses)
一般情況下,我們把類定義成為獨立的單元。有些情況下,我們把一個類放在另一個類的內部定義,稱為內部類。
內部類的作用(好處):
- 內部類提供了更好的封裝。只能讓外部類直接訪問,不允許同一個包中的其他類直接訪問
- 內部類可以直接訪問外部類的私有屬性,內部類被當成其外部類的成員。但外部類不能訪問內部類的內部屬性
內部類的使用場合:
由于內部類提供了更好的封裝特性,并且可以很方便的訪問外部類的屬性。所以,通常內部類只在為外部類提供服務的情況下優先使用。
內部類的分類:
1. 成員內部類(可以使用private、protected、public 任意進行修飾。類文件:外部類$內部類.class)
a 非靜態內部類(外部類里使用非靜態內部類和平時使用其他類沒什么不同)
- 非靜態內部類必須寄存在一個外部類對象里。因此,如果有一個非靜態內部類對象那么一定存在對應的外部類對象。非靜態內部類對象單獨屬于外部類的某個對象。
- 非靜態內部類可以使用外部類的成員,但是外部類不能直接訪問非靜態內部類成員。
- 非靜態內部類不能有靜態方法、靜態屬性、靜態初始化快
- 靜態成員不能訪問非靜態成員:外部類的靜態方法、靜態代碼塊不能訪問非靜態內部類,包括不能使用非靜態內部類定義變量,創建實例
- 成員變量訪問要點
- 內部類里的方法的局部變量:變量名
- 內部類屬性:this.變量名
- 外部類屬性:外部類名.this變量名
- 內部類的訪問
- 外部類中定義內部類:new innerClass()
- 外部類以外的地方使用非靜態內部類
b 靜態內部類
- 定義方式
Static class ClassName{
// 類體
}
- 使用要點
- 當一個靜態內部類對象存在,并不一定存在對應的外部類對象,靜態內部類的實例化方法不能直接訪問外部類的非靜態實例方法。
- 靜態內部類看做外部類的一個靜態成員。因此外部類的方法中可以通過:靜態內部類.名字 訪問靜態內部類的靜態成員。通過new 靜態內部類() 訪問靜態內部類的實例。
- 在外部類的外面創建靜態內部類
Face.Ear e = new Face.Ear();
e.listen();
2 匿名內部類
顧名思義,沒有名字的內部類。表面上看起來它們似乎有名字,實際那不是它們的名字。適合那種只需要使用一次的類。
當程序中使用匿名內部類時,在定義匿名內部類的地方往往直接創建該類的一個對象。
匿名內部類的聲明格式如下:
new 父類構造器(參數列表)|實現接口()
{
//匿名內部類的類體部分
}
匿名內部類就是沒有名字的內部類。什么情況下需要使用匿名內部類?如果滿足下面的一些條件,使用匿名內部類是比較合適的:
- 只用到類的一個實例
- 類在定義后馬上用到
- 類非常?。⊿UN推薦是在4行代碼以下)
- 給類命名并不會導致你的代碼更容易被理解
在使用匿名內部類時,要記住以下幾個原則:
- 匿名內部類不能有構造方法
- 匿名內部類不能定義任何靜態成員、靜態方法
- 匿名內部類不能是public,protected,private,static
- 只能創建匿名內部類的一個實例
- 一個匿名內部類一定是在new的后面,用其隱含實現一個接口或實現一個類
- 因匿名內部類為局部內部類,所以局部內部類的所有限制都對其生效
但使用匿名內部類還有個前提條件:必須繼承一個父類或實現一個接口
- 不使用匿名內部類來實現抽象方法
- 匿名內部類的基本實現
- 在接口上使用匿名內部類
局部內部類
定義在方法內部,作用域只限于本方法,用的很少,幾乎不用
拓展閱讀:
每日一練:
課堂作業:
作業點我查看
課外練習:
課外作業點我查看
世界上所有的追求都是因為熱愛
一枚愛編碼 愛生活 愛分享的IT信徒
— hongXkeX