Java学习笔记_多态/内部类
多態(tài)的格式與使用
代碼當(dāng)中體現(xiàn)多態(tài)性,其實(shí)就是一句話,父類引用指向子類對象
格式:
父類名稱 對象名 = new 子類名稱();
或者
接口名稱 對象名 = new 實(shí)現(xiàn)類名稱();
多態(tài)中成員變量的使用特點(diǎn)
訪問成員變量的兩種方式:
多態(tài)中成員方法的使用特點(diǎn)
在多態(tài)的代碼當(dāng)中,成員方法的訪問規(guī)則是:
看new的是誰,就優(yōu)先用誰,沒有則向上找
口訣:編譯看左邊,運(yùn)行看右邊
成員變量:編譯看左邊,運(yùn)行還看左邊
成員方法:編譯看左邊,運(yùn)行看右邊
instantceof關(guān)鍵字
對象一旦向上轉(zhuǎn)型為父類,那么就無法調(diào)用子類原本特有的內(nèi)容
解決方案:用對象的向下轉(zhuǎn)型還原
public class Demo{public static void main(String[] args){//對象的向上轉(zhuǎn)型,就是父類引用指向子類對象Animal animal = new Cat();//本來創(chuàng)建的時候是一只貓animal.eat();//貓吃魚// animal.catchMouse();//錯誤寫法//向下轉(zhuǎn)型,進(jìn)行“還原”動作Cat cat = (Cat) animal;cat.catchMouse();//貓抓老鼠 }如何才能知道一個父類引用的對象,本來是什么子類?
格式:
對象 instanceof 類名稱
這將會得到有個boolean值結(jié)果,也就是判斷前面的對象能不能當(dāng)作后面類型的實(shí)例
final關(guān)鍵字用于修飾類
當(dāng)final關(guān)鍵字用來修飾一個類的時候,格式:
public final class 類名稱{
//…
}
含義:當(dāng)前這個類不能有任何子類
注意:一個類如果是final的,那么其中所有的成員方法都無法進(jìn)行覆蓋重寫
final關(guān)鍵字修飾成員方法
當(dāng)final關(guān)鍵字用來修飾一個方法的時候,這個方法就是最終方法,也就是不能被覆蓋重寫
格式:
修飾符 final 返回值類型 方法名稱(參數(shù)列表){
//方法體
}
注意事項(xiàng):
對于類、方法來說,abstract關(guān)鍵字和final關(guān)鍵字不能同時使用,因?yàn)槊?/p>
public abstract /*final*/ void methodAbs();
final關(guān)鍵字修飾局部變量
final關(guān)鍵字代表最終的、不可改變的
常見的四種用法:
final關(guān)鍵字用于修飾成員
對于成員變量來說,如果使用final關(guān)鍵字修飾,那么這個變量照樣是不可變的
成員內(nèi)部類
成員內(nèi)部類的定義格式
修飾符 class 外部類名稱{
修飾符 class 內(nèi)部類名稱{
// …
}
// …
}
注意:內(nèi)用外,隨意訪問;外用內(nèi),需要內(nèi)部類對象
使用成員內(nèi)部類的方式:
外部類名稱.內(nèi)部類名稱 對象名 = new 外部類名稱().new 內(nèi)部類名稱();
內(nèi)部類的同名變量訪問
如果出現(xiàn)了重名現(xiàn)象,那么格式是:外部類.this.外部類成員變量名
局部內(nèi)部類的定義
定義格式:
修飾符 class 外部類名稱 {
修飾符 返回值類型 外部類方法名稱(參數(shù)列表{
class 局部內(nèi)部類名稱{
// …
}
}
}
局部內(nèi)部類的final問題
局部內(nèi)部類,如果希望訪問所在方法的局部變量,那么這個局部變量必須是有效final的
備注:從Java8開始,只要局部變量事實(shí)不變,那么final關(guān)鍵字可以省略
匿名內(nèi)部類
如果接口的實(shí)現(xiàn)類(或者是父類的子類)只需要使用唯一的一次
那么這種情況下就可以省略掉該類的定義,而改為使用匿名內(nèi)部類
匿名內(nèi)部類的定義:
接口名稱 對象名 = new 接口名稱(){
//覆蓋重寫所有抽象方法
}
如果希望多次創(chuàng)建對象,而且類的內(nèi)容一樣的話,那么就必須使用單獨(dú)定義的實(shí)現(xiàn)類
如果希望同一個對象,調(diào)用多次方法,那么必須給對象起個名字
總結(jié)
以上是生活随笔為你收集整理的Java学习笔记_多态/内部类的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 计算机内存分为哪几种
- 下一篇: java并发排它锁_Java并发编程进阶