最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

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

轉(zhuǎn)型:

[自動,90%] (1)對象的向上轉(zhuǎn)型:父類 父類對象 = 子類實例

[強(qiáng)制,1%]   (2)對象的向下轉(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 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)容,因為向上轉(zhuǎn)型將子類對象變?yōu)楦割悓ο?調(diào)用了子類的print方法

向下轉(zhuǎn)型指的是將父類對象變?yōu)樽宇悓ο螅谶@之前我們需要明確:為什么我們需要向下轉(zhuǎn)型?當(dāng)你需要子類擴(kuò)
充操作的時候就要采用向下轉(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();
? ? ? ? //這個時候父類能夠調(diào)用的方法都是本類定義好的方法
? ? ? ? //所以并沒有Student類中的fun()方法,那么只能夠進(jìn)行向下轉(zhuǎn)型處理
? ? ? ? Student stu = (Student) per;
? ? ? ? stu.fun();
? ? }
}

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

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

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

子類對象 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)換到底有什么意義?

要求定義一個方法,這個方法可以接收Person類的所有子類實例,并調(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();
? ? }
}

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

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

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

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

相關(guān)文章

  • 詳解Mybatis通用Mapper介紹與使用

    詳解Mybatis通用Mapper介紹與使用

    目前通用mapper只支持對單表的操作,對單表的增刪改查,無需在mapper.xml寫對應(yīng)的sql語句,只需要我們調(diào)用相應(yīng)的接口,對于快速開發(fā)極為方便,感興趣的小伙伴們可以參考一下
    2018-06-06
  • SpringMvc入門指南(必看)

    SpringMvc入門指南(必看)

    下面小編就為大家?guī)硪黄猄pringMvc入門指南(必看)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-06-06
  • Mybatis-plus支持Gbase8s分頁的實現(xiàn)示例

    Mybatis-plus支持Gbase8s分頁的實現(xiàn)示例

    本文主要介紹了Mybatis-plus支持Gbase8s分頁的實現(xiàn)示例,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-11-11
  • 聊聊maven的pom.xml中的exclusions標(biāo)簽的作用

    聊聊maven的pom.xml中的exclusions標(biāo)簽的作用

    這篇文章主要介紹了maven的pom.xml中的exclusions標(biāo)簽的作用,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-12-12
  • request.getRequestURL()等方法得到路徑的區(qū)別及說明

    request.getRequestURL()等方法得到路徑的區(qū)別及說明

    這篇文章主要介紹了request.getRequestURL()等方法得到路徑的區(qū)別及說明,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-12-12
  • Spring Boot實現(xiàn)跨域訪問實現(xiàn)代碼

    Spring Boot實現(xiàn)跨域訪問實現(xiàn)代碼

    本文通過實例代碼給大家介紹了Spring Boot實現(xiàn)跨域訪問的知識,然后在文中給大家介紹了spring boot 服務(wù)器端設(shè)置允許跨域訪問 的方法,感興趣的朋友一起看看吧
    2017-07-07
  • 基于SpringBoot實現(xiàn)定時發(fā)送郵件過程解析

    基于SpringBoot實現(xiàn)定時發(fā)送郵件過程解析

    這篇文章主要介紹了基于SpringBoot實現(xiàn)定時發(fā)送郵件過程解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-06-06
  • SpringBoot QQ郵箱發(fā)送郵件實例代碼

    SpringBoot QQ郵箱發(fā)送郵件實例代碼

    大家好,本篇文章主要講的是SpringBoot QQ郵箱發(fā)送郵件實例代碼,感興趣的同學(xué)趕快來看一看吧,對你有幫助的話記得收藏一下,方便下次瀏覽
    2021-12-12
  • Java后臺基于POST獲取JSON格式數(shù)據(jù)

    Java后臺基于POST獲取JSON格式數(shù)據(jù)

    這篇文章主要介紹了Java后臺基于POST獲取JSON格式數(shù)據(jù),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-03-03
  • Java中for、foreach、stream區(qū)別和性能比較詳解

    Java中for、foreach、stream區(qū)別和性能比較詳解

    for、foreach、stream都可以循環(huán)處理數(shù)據(jù),如果單純當(dāng)循環(huán)使用,for、foreach、stream哪個性能更好,這篇文章主要給大家介紹了關(guān)于Java中for、foreach、stream區(qū)別和性能的相關(guān)資料,需要的朋友可以參考下
    2024-03-03

最新評論

清徐县| 曲靖市| 盐池县| 昌邑市| 满洲里市| 万安县| 连江县| 商水县| 涿州市| 古丈县| 吴川市| 五台县| 谷城县| 如东县| 炎陵县| 耿马| 原平市| 兴隆县| 县级市| 莱阳市| 苍梧县| 安平县| 龙游县| 桃园县| 锡林郭勒盟| 务川| 蒙山县| 隆昌县| 怀来县| 西畴县| 康马县| 上饶市| 鲁山县| 磴口县| 咸丰县| 宿松县| 仁化县| 长垣县| 麦盖提县| 马山县| 鄂伦春自治旗|