Java上轉(zhuǎn)型和下轉(zhuǎn)型對(duì)象
上轉(zhuǎn)型對(duì)象:子類創(chuàng)建對(duì)象 并將這個(gè)對(duì)象引用賦值給父類的對(duì)象。
語法格式:Father f=new Son();
注意事項(xiàng):
- 上轉(zhuǎn)型對(duì)象是由子類創(chuàng)建的,但上轉(zhuǎn)型對(duì)象會(huì)失去子類的一些屬性和方法。
- 上轉(zhuǎn)型對(duì)象調(diào)用方法時(shí),就是調(diào)用子類繼承和重寫過的方法。而不會(huì)是新增的方法,也不是父類原有的方法。
- 上轉(zhuǎn)型對(duì)象可以操縱父類原有的屬性和功能,無論這些方法是否被重寫。
- 上轉(zhuǎn)型對(duì)象可以再?gòu)?qiáng)制轉(zhuǎn)換到一個(gè)子類對(duì)象,強(qiáng)制轉(zhuǎn)換過的對(duì)象具有子類所有屬性和功能。
代碼示例:
public class Shangz{ //父類 int a=1; int b=2; void cal(){ //父類自己的方法 System.out.println(a*b); } public static void main(String[] args) { Shangz s=new ShangzDemo(); s.cal(); //上轉(zhuǎn)型對(duì)象調(diào)用子類的方法 s.err(); //報(bào)錯(cuò),上轉(zhuǎn)型對(duì)象失去了子類的屬性 } } class ShangzDemo extends Shangz{ //子類繼承父類 void cal(){ //子類重寫父類的方法 System.out.println(a+b); } void err(){ //子類自己的方法 System.out.println(a/b); } }
下轉(zhuǎn)型對(duì)象:父類引用的對(duì)象轉(zhuǎn)換為子類的類型(強(qiáng)制類型轉(zhuǎn)換)。
語法格式:
Father f=new Son();
Son s=(Father)f;
錯(cuò)誤語法:(編譯不報(bào)錯(cuò),運(yùn)行報(bào)錯(cuò))
Father f=new Father();
Son s=Son(f);
注意事項(xiàng):
- 向下轉(zhuǎn)型必須先向上轉(zhuǎn)型,否則會(huì)發(fā)生異常。
- 下轉(zhuǎn)型對(duì)象可以引用子類和父類的屬性和方法。
代碼例子:
public class Shangz{ //父類 int a=1; int b=2; void cal(){ //父類自己的方法 System.out.println(a*b); } public static void main(String[] args) { Shangz s=new ShangzDemo(); ShangzDemo d=(ShangzDemo)s; d.cal(); //調(diào)用了父類的方法 d.div(); //對(duì)象調(diào)用子類的方法 Shangz serr=new Shangz(); ShangzDemo derr=(ShangzDemo)serr; derr.cal(); //編譯不報(bào)錯(cuò),運(yùn)行出現(xiàn)轉(zhuǎn)換異常 } } class ShangzDemo extends Shangz{ //子類繼承父類 void cal(){ //子類重寫父類的方法 System.out.println(a+b); } void div(){ //子類自己的方法 System.out.println(a/b); } }
最后:對(duì)象轉(zhuǎn)型在泛型中使用較多。
相關(guān)文章
SpringBoot3集成SLF4J+logback進(jìn)行日志記錄的實(shí)現(xiàn)
本文主要介紹了SpringBoot3集成SLF4J+logback進(jìn)行日志記錄的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-01-01SpringBoot3.x集成nacos并實(shí)現(xiàn)多環(huán)境配置的操作步驟
本文詳細(xì)介紹了如何在Springboot3.x中集成Nacos2.x版本,包括nacos的安裝、配置更改,以及在集成過程中遇到的問題,如端口設(shè)置、依賴版本調(diào)整等,文中通過圖文介紹的非常詳細(xì),需要的朋友可以參考下2024-10-10IDEA調(diào)試功能使用總結(jié)(step?over/step?into/force?step?into/step?o
本文主要介紹了IDEA調(diào)試功能使用總結(jié)(step?over/step?into/force?step?into/step?out),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2022-07-07SpringBoot基于Redis實(shí)現(xiàn)短信登錄的操作
驗(yàn)證碼登錄是非常常見的一種登錄方式,能夠簡(jiǎn)化用戶登錄的過程,本文主要介紹了SpringBoot基于Redis實(shí)現(xiàn)短信登錄的操作,具有一定的參考價(jià)值,感興趣的可以了解一下2023-12-12mybatis注解如何實(shí)現(xiàn)對(duì)象批量更改
這篇文章主要介紹了mybatis注解實(shí)現(xiàn)對(duì)象批量更改的方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-07-07JAVA后端學(xué)習(xí)精華之網(wǎng)絡(luò)通信項(xiàng)目進(jìn)階
不同項(xiàng)目之間的通信方式分為,http、socket、webservice;其中socket通信的效率最高,youtube就采用的是原始的socket通信,他們信奉的原則是簡(jiǎn)單有效2021-09-09