Java11-day02【多态(成员访问、多态转型、内存图解)、抽象类(成员特点)、接口(成员特点)、类和接口的关系、抽象类和接口的区别、综合案例】
- 視頻+資料(工程源碼、筆記)【鏈接:https://pan.baidu.com/s/1MdFNUADVSFf-lVw3SJRvtg? ?提取碼:zjxs】
- Java基礎(chǔ)--學習筆記(零起點打開java世界的大門)--博客匯總表
目? ?錄
01_多態(tài)
1.1、多態(tài)概述
02_多態(tài)中成員訪問特點
1.2、多態(tài)中成員訪問特點
03_多態(tài)的好處和弊端
1.3、多態(tài)的好處和弊端
04_多態(tài)中的轉(zhuǎn)型
1.4、多態(tài)中的轉(zhuǎn)型
05_多態(tài)轉(zhuǎn)型內(nèi)存圖解
1.5、多態(tài)轉(zhuǎn)型內(nèi)存圖解
06_貓和狗(多態(tài)版)
案例:貓和狗
07_抽象類
1.1、抽象類概述
08_抽象類特點
1.2、抽象類特點
09_抽象類的成員特點
1.3、抽象類的成員特點
10_貓和狗(抽象類版)
案例:貓和狗
11_接口
1.1、接口概述
12_接口特點
1.2、接口的特點
13_接口的成員特點
1.3、接口的成員特點
14_貓和狗(接口版)
案例:貓和狗
15_類和接口的關(guān)系
1.4、類和接口的關(guān)系
16_抽象類和接口的區(qū)別
1.5、抽象類和接口的區(qū)別
17_運動員和教練案例分析
案例:運動員和教練
18_運動員和教練案例代碼實現(xiàn)
01_多態(tài)
1.1、多態(tài)概述
什么是多態(tài):
同一個對象,在不同時刻表現(xiàn)出來的不同形態(tài)。
舉例:貓
可以說 貓是貓:貓 cat = new 貓();
也可以說 貓是動物:動物 animal = new 貓();
這里貓在不同的時刻表現(xiàn)出來了不同的形態(tài),這就是多態(tài)。
多態(tài)的前提:
- 要有 繼承/實現(xiàn) 關(guān)系
- 要有 方法的重寫
- 要有 父類引用指向子類對象【動物 animal = new 貓();】
02_多態(tài)中成員訪問特點
1.2、多態(tài)中成員訪問特點
成員變量:編譯看左邊,執(zhí)行看左邊(編譯看父類,運行看父類)。
成員方法:編譯看左邊,執(zhí)行看右邊(編譯看父類,運行看子類)。
?
為什么成員變量和成員方法的訪問不一樣呢?
因為成員方法有重寫,而成員變量沒有。
03_多態(tài)的好處和弊端
1.3、多態(tài)的好處和弊端
好處:提高程序的擴展性。定義方法時候,使用父類型作為參數(shù),在使用的時候,使用具體的子類型參與操作。
弊端:不能使用子類的特有成員(不能訪問子類特有的成員方法)。
假如要添加很多種動物:
貓🐱、狗🐕,都屬于 動物,在動物操作類中 改變useAnimal()方法的參數(shù)為animal。--> 該方法接收任何動物都可以。
簡化方法編寫:無論添加多少種動物,只需要在測試類中 創(chuàng)建動物對象,調(diào)用useAnimal()方法即可。
成員方法:編譯看左邊,執(zhí)行看右邊(編譯看父類,運行看子類)。
?多態(tài)弊端:不能使用子類的特有成員(不能訪問子類特有的成員方法)。
04_多態(tài)中的轉(zhuǎn)型
1.4、多態(tài)中的轉(zhuǎn)型
向上轉(zhuǎn)型
- 從子到父
- 父類引用指向子類對象
向下轉(zhuǎn)型
- 從父到子
- 父類引用轉(zhuǎn)為子類對象
- 格式:子類型 對象名 = (子類型)父類引用;
05_多態(tài)轉(zhuǎn)型內(nèi)存圖解
1.5、多態(tài)轉(zhuǎn)型內(nèi)存圖解
06_貓和狗(多態(tài)版)
案例:貓和狗
07_抽象類
1.1、抽象類概述
在做子類共性功能抽取時,有些方法在父類中并沒有具體的體現(xiàn),這個時候就需要抽象類了!
在Java中,一個沒有方法體的方法應該定義為抽象方法,而類中如果有抽象方法,該類必須定義為抽象類!
動物吃東西,貓🐱、狗🐕繼承自動物,實現(xiàn)了動物的eat()方法。
但是,貓與狗吃的東西不一樣。
缺少 方法體 或者 定義為抽象方法。
抽象方法不在抽象類中。
08_抽象類特點
1.2、抽象類特點
抽象類中不一定有抽象方法,有抽象方法的類一定是抽象類。
抽象類不能實例化!抽象類如何實例化呢?參照多態(tài)的方式,通過子類對象實例化,這叫抽象類多態(tài)。
抽象類的子類:要么重寫抽象類中的所有抽象方法;要么是抽象類。--> Dog.java
09_抽象類的成員特點
1.3、抽象類的成員特點
成員變量
- 可以是變量
- 也可以是常量
構(gòu)造方法
- 有構(gòu)造方法(空參構(gòu)造、有參構(gòu)造),但是不能實例化。
- 那么,構(gòu)造方法的作用是什么呢?用于子類訪問父類數(shù)據(jù)的初始化。
成員方法
- 可以有抽象方法:限定子類必須完成某些動作。
- 也可以有非抽象方法(普通方法):提高代碼復用性。
10_貓和狗(抽象類版)
案例:貓和狗
11_接口
1.1、接口概述
接口就是一種公共的規(guī)范標準,只要符合規(guī)范標準,大家都可以通用。
Java中的接口更多的體現(xiàn)在對行為的抽象!
不同廠商生產(chǎn)的鼠標🖱、鍵盤?、U盤,通用于USB接口 --> 參照同樣的USB接口規(guī)范進行生產(chǎn)。
12_接口特點
1.2、接口的特點
接口 用 關(guān)鍵字interface 修飾
- public interface 接口名 {}
類 實現(xiàn) 接口 用 implements 表示
- public class 類名 implements 接口名 {}
接口 不能 實例化
- 接口如何實例化呢?參照多態(tài)的方式,通過實現(xiàn)類對象實例化,這叫接口多態(tài)。
- 多態(tài)的形式:具體類多態(tài),抽象類多態(tài),接口多態(tài)。
- 多態(tài)的前提:有繼承或者實現(xiàn)關(guān)系;有方法重寫;有父(類/接口)引用指向(子/實現(xiàn))類對象。
接口的子類(實現(xiàn)類)
- 要么重寫接口中的所有抽象方法。
- 要么是抽象類。
Jumpping是抽象的,不能被實例化。
接口的子類(實現(xiàn)類)
- 要么重寫接口中的所有抽象方法。
- 要么是抽象類。
13_接口的成員特點
1.3、接口的成員特點
成員變量
- 只能是常量。
- 默認修飾符:public static final
構(gòu)造方法
- 接口沒有構(gòu)造方法,因為接口主要是對行為進行抽象的(擴展功能),而沒有具體存在。
- 一個類如果沒有父類,默認繼承自O(shè)bject類。
成員方法
- 只能是抽象方法。
- 默認修飾符:public abstract
- 關(guān)于接口中的方法,JDK8和JDK9中有一些新特性,后面再講解。
接口沒有構(gòu)造方法,因為接口主要是對行為進行抽象的(擴展功能),而沒有具體存在。
?
接口中的方法,不能有方法體(只能是抽象方法)。
14_貓和狗(接口版)
案例:貓和狗
15_類和接口的關(guān)系
1.4、類和接口的關(guān)系
類與類的關(guān)系
- 繼承關(guān)系,只能單繼承,但是可以多層繼承。
類與接口的關(guān)系
- 實現(xiàn)關(guān)系,可以單實現(xiàn),也可以多實現(xiàn),還可以在繼承一個類的同時實現(xiàn)多個接口。
接口與接口的關(guān)系
- 繼承關(guān)系,可以單繼承,也可以多繼承。
16_抽象類和接口的區(qū)別
1.5、抽象類和接口的區(qū)別
將來,門🚪又有了 更多的功能(報警):該如何實現(xiàn)報警的功能?
- 將3個功能都放在抽象類中,所有繼承抽象類的子類,都具備了報警功能,但有的門可能不具備報警功能,∴此設(shè)計不好。
- 將3個功能都放在接口中,實現(xiàn)接口中的方法(3個方法都必須實現(xiàn)),但有的門可能不具備open()、close()功能,∴此設(shè)計不好。
如何設(shè)計?open、close屬于門🚪應該具有的動作,而alarm屬于額外附加的行為,最好的解決方案就是,將報警單獨設(shè)計為一個接口,將open、close放在一個抽象類中,報警門繼承抽象類的門 實現(xiàn)報警接口。?
17_運動員和教練案例分析
案例:運動員和教練
18_運動員和教練案例代碼實現(xiàn)
總結(jié)
以上是生活随笔為你收集整理的Java11-day02【多态(成员访问、多态转型、内存图解)、抽象类(成员特点)、接口(成员特点)、类和接口的关系、抽象类和接口的区别、综合案例】的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Java10-day01【继承(变量-构
- 下一篇: Java12-day03【