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ì)象可以再強(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)文章
MyBatis+Calcite實(shí)現(xiàn)多數(shù)據(jù)庫SQL自動(dòng)適配的詳細(xì)指南
在當(dāng)今企業(yè)IT環(huán)境中,數(shù)據(jù)庫異構(gòu)性已成為常態(tài),根據(jù)DB-Engines最新調(diào)研,超過78%的企業(yè)同時(shí)使用兩種以上數(shù)據(jù)庫系統(tǒng),所以本文就來為大家介紹一下如何基于MyBatis+Calcite實(shí)現(xiàn)多數(shù)據(jù)庫SQL自動(dòng)適配吧2025-04-04
springboot2.6.4集成swagger3.0遇到的坑及解決方法
這篇文章主要介紹了springboot2.6.4如何集成swagger3.0,在集成的過程中遇到很多問題,本文給大家分享四種問題及相應(yīng)的解決方案,需要的朋友可以參考下2022-03-03
Springboot+MDC+traceId日志中打印唯一traceId
本文主要介紹了Springboot+MDC+traceId日志中打印唯一traceId,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-10-10
Spring Boot中的WebSocketMessageBrokerConfigurer接口使用
在SpringBoot中,我們可以使用 WebSocketMessageBrokerConfigurer接口來配置WebSocket消息代理,以實(shí)現(xiàn)實(shí)時(shí)通信,具有一定的參考價(jià)值,感興趣的可以了解一下2023-11-11
利用Java發(fā)送郵件的實(shí)現(xiàn)代碼
這篇文章給大家分享了如何利用Java發(fā)送郵件,文章通過實(shí)例代碼介紹的很詳細(xì),有需要的可以參考借鑒。2016-08-08
小白也可以學(xué)會(huì)的Java NIO的Write事件
剛開始對(duì)NIO的寫操作理解的不深,不知道為什么要注冊(cè)寫事件,何時(shí)注冊(cè)寫事件,為什么寫完之后要取消注冊(cè)寫事件,今天特地整理了本篇文章,需要的朋友可以參考下2021-06-06
springboot項(xiàng)目如何部署到服務(wù)器
這篇文章主要介紹了springboot項(xiàng)目如何部署到服務(wù)器問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-05-05
java實(shí)現(xiàn)日歷(某年的日歷,某月的日歷)用戶完全自定義
本篇文章介紹了,java實(shí)現(xiàn)日歷(某年的日歷,某月的日歷)用戶完全自定義。需要的朋友參考下2013-05-05
編碼實(shí)現(xiàn)從無序鏈表中移除重復(fù)項(xiàng)(C和JAVA實(shí)例)
如果不能使用臨時(shí)緩存,你怎么實(shí)現(xiàn)無序鏈表中移除重復(fù)項(xiàng)(?C和JAVA實(shí)例無序鏈表中移除重復(fù)項(xiàng)。2013-10-10

