Java上轉(zhuǎn)型和下轉(zhuǎn)型對象
上轉(zhuǎn)型對象:子類創(chuàng)建對象 并將這個對象引用賦值給父類的對象。
語法格式:Father f=new Son();
注意事項:
- 上轉(zhuǎn)型對象是由子類創(chuàng)建的,但上轉(zhuǎn)型對象會失去子類的一些屬性和方法。
- 上轉(zhuǎn)型對象調(diào)用方法時,就是調(diào)用子類繼承和重寫過的方法。而不會是新增的方法,也不是父類原有的方法。
- 上轉(zhuǎn)型對象可以操縱父類原有的屬性和功能,無論這些方法是否被重寫。
- 上轉(zhuǎn)型對象可以再強制轉(zhuǎn)換到一個子類對象,強制轉(zhuǎn)換過的對象具有子類所有屬性和功能。
代碼示例:
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)型對象調(diào)用子類的方法
s.err(); //報錯,上轉(zhuǎn)型對象失去了子類的屬性
}
}
class ShangzDemo extends Shangz{ //子類繼承父類
void cal(){ //子類重寫父類的方法
System.out.println(a+b);
}
void err(){ //子類自己的方法
System.out.println(a/b);
}
}
下轉(zhuǎn)型對象:父類引用的對象轉(zhuǎn)換為子類的類型(強制類型轉(zhuǎn)換)。
語法格式:
Father f=new Son();
Son s=(Father)f;
錯誤語法:(編譯不報錯,運行報錯)
Father f=new Father();
Son s=Son(f);
注意事項:
- 向下轉(zhuǎn)型必須先向上轉(zhuǎn)型,否則會發(fā)生異常。
- 下轉(zhuǎn)型對象可以引用子類和父類的屬性和方法。
代碼例子:
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(); //對象調(diào)用子類的方法
Shangz serr=new Shangz();
ShangzDemo derr=(ShangzDemo)serr;
derr.cal(); //編譯不報錯,運行出現(xiàn)轉(zhuǎn)換異常
}
}
class ShangzDemo extends Shangz{ //子類繼承父類
void cal(){ //子類重寫父類的方法
System.out.println(a+b);
}
void div(){ //子類自己的方法
System.out.println(a/b);
}
}
最后:對象轉(zhuǎn)型在泛型中使用較多。
相關文章
MyBatis+Calcite實現(xiàn)多數(shù)據(jù)庫SQL自動適配的詳細指南
在當今企業(yè)IT環(huán)境中,數(shù)據(jù)庫異構性已成為常態(tài),根據(jù)DB-Engines最新調(diào)研,超過78%的企業(yè)同時使用兩種以上數(shù)據(jù)庫系統(tǒng),所以本文就來為大家介紹一下如何基于MyBatis+Calcite實現(xiàn)多數(shù)據(jù)庫SQL自動適配吧2025-04-04
springboot2.6.4集成swagger3.0遇到的坑及解決方法
這篇文章主要介紹了springboot2.6.4如何集成swagger3.0,在集成的過程中遇到很多問題,本文給大家分享四種問題及相應的解決方案,需要的朋友可以參考下2022-03-03
Springboot+MDC+traceId日志中打印唯一traceId
本文主要介紹了Springboot+MDC+traceId日志中打印唯一traceId,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下2021-10-10
Spring Boot中的WebSocketMessageBrokerConfigurer接口使用
在SpringBoot中,我們可以使用 WebSocketMessageBrokerConfigurer接口來配置WebSocket消息代理,以實現(xiàn)實時通信,具有一定的參考價值,感興趣的可以了解一下2023-11-11
java實現(xiàn)日歷(某年的日歷,某月的日歷)用戶完全自定義
本篇文章介紹了,java實現(xiàn)日歷(某年的日歷,某月的日歷)用戶完全自定義。需要的朋友參考下2013-05-05
編碼實現(xiàn)從無序鏈表中移除重復項(C和JAVA實例)
如果不能使用臨時緩存,你怎么實現(xiàn)無序鏈表中移除重復項(?C和JAVA實例無序鏈表中移除重復項。2013-10-10

