欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Java向上向下轉(zhuǎn)型詳解

 更新時(shí)間:2022年09月19日 08:36:56   作者:#define微光  
這篇文章主要為大家詳細(xì)介紹了Java向上向下轉(zhuǎn)型,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

Java之所以可以向上向下轉(zhuǎn)型是依據(jù)Java三大特性之一的多態(tài)性,而轉(zhuǎn)型就是對(duì)象的多態(tài)性,需要注意的是轉(zhuǎn)型的前提是方法覆寫(xiě)

轉(zhuǎn)型:

[自動(dòng),90%] (1)對(duì)象的向上轉(zhuǎn)型:父類 父類對(duì)象 = 子類實(shí)例

[強(qiáng)制,1%]   (2)對(duì)象的向下轉(zhuǎn)型:子類 子類對(duì)象 = (子類) 父類實(shí)例

觀察向上轉(zhuǎn)型

package TestOverride;
?
/**
?* Author:weiwei
?* description:向上轉(zhuǎn)型
?* Creat:2019/3/29
?**/
?
class Person{
? ? public void print(){
? ? ? ? System.out.println("1.我是爸爸!");
? ? }
}
class Student extends Person{
? ? public void print(){
? ? ? ? System.out.println("2.我是兒子!");
? ? }
}
public class Test {
? ? public static void main(String[] args) {
? ? ? ? Person per = new Student();//向上轉(zhuǎn)型
? ? ? ? per.print();
? ? }
}

運(yùn)行結(jié)果:

2.我是兒子!
 
Process finished with exit code 0

運(yùn)行結(jié)果只打印了子類print方法的內(nèi)容,因?yàn)橄蛏限D(zhuǎn)型將子類對(duì)象變?yōu)楦割悓?duì)象,調(diào)用了子類的print方法

向下轉(zhuǎn)型指的是將父類對(duì)象變?yōu)樽宇悓?duì)象,但在這之前我們需要明確:為什么我們需要向下轉(zhuǎn)型?當(dāng)你需要子類擴(kuò)
充操作的時(shí)候就要采用向下轉(zhuǎn)型 

觀察向下轉(zhuǎn)型(存在安全隱患)

package TestOverride;
?
/**
?* Author:weiwei
?* description:向下轉(zhuǎn)型
?* Creat:2019/3/29
?**/
?
class Person{
? ? public void print(){
? ? ? ? System.out.println("1.我是爸爸!");
? ? }
}
class Student extends Person{
? ? public void print(){
? ? ? ? System.out.println("2.我是兒子!");
? ? }
? ? public void fun(){
? ? ? ? System.out.println("只有兒子有!");
? ? }
}
public class Test {
? ? public static void main(String[] args) {
? ? ? ? Person per = new Person();
? ? ? ? per.print();
? ? ? ? //這個(gè)時(shí)候父類能夠調(diào)用的方法都是本類定義好的方法
? ? ? ? //所以并沒(méi)有Student類中的fun()方法,那么只能夠進(jìn)行向下轉(zhuǎn)型處理
? ? ? ? Student stu = (Student) per;
? ? ? ? stu.fun();
? ? }
}

并不是所有的父類對(duì)象都可以向下轉(zhuǎn)型,如果要想進(jìn)行向下操作之前,一定要首先發(fā)生向上轉(zhuǎn)型,否則在轉(zhuǎn)型時(shí)會(huì)出現(xiàn) ClassCastException 。
觀察錯(cuò)誤轉(zhuǎn)型

Person per = new Person(); //父類對(duì)象
Student stu = (Student) per; //強(qiáng)轉(zhuǎn)

如果向下轉(zhuǎn)型存在安全隱患,那么如何轉(zhuǎn)型才靠譜呢?最好的做法就是先進(jìn)行判斷,而后在進(jìn)行轉(zhuǎn)型,那么就可以依instanceo關(guān)鍵字實(shí)現(xiàn),該關(guān)鍵字語(yǔ)法如下:

子類對(duì)象 instanceof類,返回boolean類型

觀察instanceof操作

Person per = new Student();
? ? ? ? System.out.println(per instanceof Person);
? ? ? ? System.out.println(per instanceof Student);
? ? ? ? if (per instanceof Student) { //避免ClassCastException
? ? ? ? ? ?Student stu = (Student) per ;
? ? ? ? ? ?stu.fun();
? ? ? ?}

這種轉(zhuǎn)換到底有什么意義?

要求定義一個(gè)方法,這個(gè)方法可以接收Person類的所有子類實(shí)例,并調(diào)用Person類的方法。

package TestOverride;
?
/**
?* Author:weiwei
?* description:向下轉(zhuǎn)型
?* Creat:2019/3/29
?**/
?
class Person{
? ? public void print(){
? ? ? ? System.out.println("1.我是人類!");
? ? }
}
class Student extends Person{
? ? public void print(){
? ? ? ? System.out.println("2.我是學(xué)生!");
? ? }
}
class Worker extends Person{
? ? public void print(){
? ? ? ? System.out.println("3.我是工人!");
? ? }
}
public class Test {
? ? public static void main(String[] args) {
? ? ? ? whoAre(new Student());
? ? ? ? whoAre(new Worker());
? ? }
? ? public static void whoAre(Person per){
? ? ? ? per.print();
? ? }
}

通過(guò)以上分析就可以清楚,對(duì)象的向上轉(zhuǎn)型有一個(gè)最為核心的用途:操作參數(shù)統(tǒng)一。

多態(tài)性總結(jié):

  • 對(duì)象多態(tài)性的核心在于方法的覆寫(xiě)。
  • 通過(guò)對(duì)象的向上轉(zhuǎn)型可以實(shí)現(xiàn)接收參數(shù)的統(tǒng)一,向下轉(zhuǎn)型可以實(shí)現(xiàn)子類擴(kuò)充方法的調(diào)用(一般不操作向下轉(zhuǎn)型,有安全隱患)。
  • 兩個(gè)沒(méi)有關(guān)系的類對(duì)象是不能夠進(jìn)行轉(zhuǎn)型的,一定會(huì)產(chǎn)生ClassCastException。

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • Java使用Deque實(shí)現(xiàn)堆棧的方法

    Java使用Deque實(shí)現(xiàn)堆棧的方法

    這篇文章主要介紹了Java使用Deque實(shí)現(xiàn)堆棧的方法,實(shí)例分析了java簡(jiǎn)單實(shí)現(xiàn)堆棧的相關(guān)技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2015-07-07
  • Intellij idea 代碼提示忽略字母大小寫(xiě)和常用快捷鍵及設(shè)置步驟

    Intellij idea 代碼提示忽略字母大小寫(xiě)和常用快捷鍵及設(shè)置步驟

    這篇文章主要介紹了Intellij idea 代碼提示忽略字母大小寫(xiě)和常用快捷鍵及設(shè)置步驟,本文通過(guò)圖文并茂的形式給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-02-02
  • 泛談Java NIO

    泛談Java NIO

    java.nio全稱java non-blocking IO,是指jdk1.4 及以上版本里提供的新api(New IO),使用它可以提供非阻塞式的高伸縮性網(wǎng)絡(luò)。下面我們來(lái)簡(jiǎn)單了解一下吧
    2019-05-05
  • JDBC獲取元數(shù)據(jù)demo

    JDBC獲取元數(shù)據(jù)demo

    這篇文章主要為大家介紹了JDBC獲取元數(shù)據(jù)實(shí)現(xiàn)示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-11-11
  • java利用多線程和Socket實(shí)現(xiàn)猜拳游戲

    java利用多線程和Socket實(shí)現(xiàn)猜拳游戲

    這篇文章主要為大家詳細(xì)介紹了java利用多線程和Socket實(shí)現(xiàn)猜拳游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-08-08
  • Java調(diào)整圖片大小的3種方式小結(jié)

    Java調(diào)整圖片大小的3種方式小結(jié)

    在軟件開(kāi)發(fā)中處理圖像是一個(gè)常見(jiàn)任務(wù),特別是當(dāng)我們需要優(yōu)化圖像尺寸以適應(yīng)不同的應(yīng)用場(chǎng)景時(shí),這篇文章主要介紹了Java調(diào)整圖片大小的3種方式,需要的朋友可以參考下
    2024-09-09
  • SpringBoot 枚舉類型的自動(dòng)轉(zhuǎn)換的實(shí)現(xiàn)

    SpringBoot 枚舉類型的自動(dòng)轉(zhuǎn)換的實(shí)現(xiàn)

    一般我們?cè)跀?shù)據(jù)庫(kù)都會(huì)定義數(shù)值型的枚舉常量,不管是序列化還是反序列化都是需要我們手動(dòng)去轉(zhuǎn)換成枚舉類型的,本文主要介紹了Spring Boot 枚舉類型的自動(dòng)轉(zhuǎn)換,感興趣的可以了解一下
    2022-03-03
  • 使用Spark?SQL實(shí)現(xiàn)讀取不帶表頭的txt文件

    使用Spark?SQL實(shí)現(xiàn)讀取不帶表頭的txt文件

    這篇文章主要為大家詳細(xì)介紹了如何使用Spark?SQL實(shí)現(xiàn)讀取不帶表頭的txt文件,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2024-03-03
  • SpringCloud?Gateway詳細(xì)分析實(shí)現(xiàn)負(fù)載均衡與熔斷和限流

    SpringCloud?Gateway詳細(xì)分析實(shí)現(xiàn)負(fù)載均衡與熔斷和限流

    這篇文章主要介紹了SpringCloud?Gateway實(shí)現(xiàn)路由轉(zhuǎn)發(fā),負(fù)載均衡,熔斷和限流,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-07-07
  • SpringBoot?AOP?@Pointcut切入點(diǎn)表達(dá)式排除某些類方式

    SpringBoot?AOP?@Pointcut切入點(diǎn)表達(dá)式排除某些類方式

    這篇文章主要介紹了SpringBoot?AOP?@Pointcut切入點(diǎn)表達(dá)式排除某些類方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-11-11

最新評(píng)論