成人无码视频,亚洲精品久久久久av无码,午夜精品久久久久久毛片,亚洲 中文字幕 日韩 无码

資訊專欄INFORMATION COLUMN

多態(tài)、向上轉(zhuǎn)型和向下轉(zhuǎn)型

iamyoung001 / 2053人閱讀

摘要:多態(tài)訪問成員變量的兩種方式直接通過對(duì)象名稱訪問成員變量看等號(hào)左邊是誰,優(yōu)先用誰,沒有則向上找。只用于成員方法,不適用于成員變量。

多態(tài)性:

是對(duì)對(duì)象來說的。extends或implements是多態(tài)性的前提。

經(jīng)理類繼承雇員類。小明是一個(gè)經(jīng)理對(duì)象,這個(gè)對(duì)象既有經(jīng)理形態(tài),也有雇員形態(tài)。一個(gè)對(duì)象有多種形態(tài),這就是對(duì)象的多態(tài)性。

多態(tài)性格式:父類引用指向子類對(duì)象

格式:父類名稱 對(duì)象名 = new 子類名稱();

或:接口名稱 對(duì)象名 = new 實(shí)現(xiàn)類名稱();

可以這樣理解:子類被當(dāng)做父類來看待(一個(gè)經(jīng)理被當(dāng)做雇員來看待,一直貓被當(dāng)做動(dòng)物來看待)。而對(duì)象只能引用父類特有的方法。

多態(tài)訪問成員變量的兩種方式:

直接通過對(duì)象名稱訪問成員變量:看等號(hào)左邊是誰,優(yōu)先用誰,沒有則向上找。(編譯看左邊,運(yùn)行還看左邊)

Fu obj = new Zi();
System.out.println(obj.num);

間接通過成員方法訪問成員變量:看該方法屬于誰優(yōu)先用誰,沒有則向上找。(先看右邊子類中有沒有該方法,沒有則向上找)

多態(tài)訪問成員方法:

訪問成員方法的規(guī)則:看new的是誰,則優(yōu)先用誰,沒有則向上找(編譯看左邊,運(yùn)行看右邊)。

先看左邊父類中有沒有該方法,沒有則編譯不通過報(bào)錯(cuò),但運(yùn)行時(shí)是看右邊子類方法,沒有則向上找。只用于成員方法,不適用于成員變量。

向上轉(zhuǎn)型和向下轉(zhuǎn)型

在Java中,對(duì)象變量是多態(tài)的。

Employee e;
e = new Employee(...);
e = new Manager(...);//Manager繼承Employee

這里的Employee類變量可以引用Employee類對(duì)象和任何一個(gè)Employee類的子類。

在《JAVA核心技術(shù)卷一》P152的代碼中

Manager boss = new Manager(...);
Employee[] staff = new Employee[3];
staff[0] = boss;

Employee boss = new Employee(...);
Manager[] staff = new Manager[3];
staff[0] = boss;//錯(cuò)誤!

boss是Manager類對(duì)象,staff數(shù)組是Employee類對(duì)象,所以staff可以和boss指向同一對(duì)象,且編譯器將staff[0]看成Employee對(duì)象。如果是下面這段代碼會(huì)報(bào)錯(cuò),因?yàn)椴皇撬械墓蛦T都是經(jīng)理(類比double轉(zhuǎn)換int可能會(huì)損失精度)。

向上轉(zhuǎn)型一定是安全的,從小范圍轉(zhuǎn)向了大范圍(從小范圍的經(jīng)理轉(zhuǎn)向大范圍的雇員,從小范圍的貓轉(zhuǎn)向大范圍的動(dòng)物,類似于從小范圍的int轉(zhuǎn)向大范圍的double不會(huì)損失精度)。
對(duì)象的向上轉(zhuǎn)型其實(shí)就是多態(tài)寫法:

//格式:父類名稱  對(duì)象名  =  new  子類名稱();
//右邊創(chuàng)建了一個(gè)子類對(duì)象,把它當(dāng)做父類看待使用
Employee  Manager  =  new  Manager()
//創(chuàng)建了一個(gè)經(jīng)理對(duì)象,把它當(dāng)做雇員來看待

向下轉(zhuǎn)型是一個(gè)【還原】的動(dòng)作,但要保證對(duì)象一開始創(chuàng)建的時(shí)候 ,就是經(jīng)理,才能由雇員向下轉(zhuǎn)型為經(jīng)理。(用instanceof關(guān)鍵字判斷前面的對(duì)象是不是后面的類型)

String c = (String)staff[1];
//會(huì)產(chǎn)生編譯錯(cuò)誤,因?yàn)镾tring不是Employee的子類

只能在繼承層次內(nèi)進(jìn)行類型轉(zhuǎn)換

將超類轉(zhuǎn)換成子類(向下轉(zhuǎn)型)之前,應(yīng)該使用instanceof進(jìn)行檢查

類型轉(zhuǎn)換不是一種好的做法,多態(tài)的對(duì)象向下轉(zhuǎn)型是為了使用子類特有的方法,這種情況下應(yīng)該檢查超類的設(shè)計(jì)是否合理,也許重新設(shè)計(jì)超類并添加相應(yīng)方法才是正確做法。盡量少用類型轉(zhuǎn)換和instanceof

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://m.hztianpu.com/yun/75233.html

相關(guān)文章

  • 1、接口 2、多態(tài)

    摘要:接口的概念接口的概念接口是功能的集合,同樣可看做是一種數(shù)據(jù)類型,是比抽象類更為抽象的類。多態(tài)的前提是必須有子父類關(guān)系或者類實(shí)現(xiàn)接口關(guān)系,否則無法完成多態(tài)。 01接口的概念 * A:接口的概念 接口是功能的集合,同樣可看做是一種數(shù)據(jù)類型,是比抽象類更為抽象的類。 接口只描述所應(yīng)該具備的方法,并沒有具體實(shí)現(xiàn),具體的實(shí)現(xiàn)由接口的實(shí)現(xiàn)類(相當(dāng)于接口的子類)來完成。這樣將功能的定...

    Magicer 評(píng)論0 收藏0
  • 多態(tài)

    摘要:父類型引用指向子類型對(duì)象多態(tài)以下程序編譯是沒有問題的,因?yàn)榫幾g器檢查到的數(shù)據(jù)類型是和之間存在繼承關(guān)系,并且是父類型,是子類型,父類型轉(zhuǎn)換成子類型叫做向下轉(zhuǎn)型,語法合格。 package duotai;public class Animal { public void move() { System.out.pr...

    Magicer 評(píng)論0 收藏0
  • 面向?qū)ο蠼涌?em>多態(tài)

    摘要:多態(tài)的前提是必須有子父類關(guān)系或者類實(shí)現(xiàn)接口關(guān)系,否則無法完成多態(tài)。具體格式如下父類引用指向子類對(duì)象就是多態(tài)的定義格式。多態(tài)的轉(zhuǎn)型分為向上轉(zhuǎn)型與向下轉(zhuǎn)型兩種向上轉(zhuǎn)型當(dāng)有子類對(duì)象賦值給一個(gè)父類引用時(shí),便是向上轉(zhuǎn)型,多態(tài)本身就是向上轉(zhuǎn)型的過程。 第3天 面向?qū)ο?今日內(nèi)容介紹? 接口? 多態(tài)? 筆記本案例今日學(xué)習(xí)目標(biāo)? 寫出定義接口的格式? 寫出實(shí)現(xiàn)接口的格式?...

    wangdai 評(píng)論0 收藏0
  • 9. java 多態(tài)

    摘要:概念所謂多態(tài),就是指一個(gè)引用變量類型在不同的情況下的多種狀態(tài)。需進(jìn)行強(qiáng)制轉(zhuǎn)換有風(fēng)險(xiǎn),最好使用進(jìn)行判斷。繼承在多態(tài)中必須存在有繼承關(guān)系的子類和父類。在中有兩種形式可以實(shí)現(xiàn)多態(tài)繼承和接口。 概念 所謂多態(tài),就是指一個(gè)引用變量(類型)在不同的情況下的多種狀態(tài)。也可以理解為,多態(tài)是指通過指向父類的指針,來調(diào)用在不同子類中實(shí)現(xiàn)的方法。多態(tài)性是對(duì)象多種表現(xiàn)形式的體現(xiàn) 多態(tài)性嚴(yán)格來說有兩種描述形式:...

    wanglu1209 評(píng)論0 收藏0
  • Java面向?qū)ο蠹捌淙筇卣?/b>

    摘要:面向?qū)ο缶幊趟枷朊嫦驅(qū)ο?,?jiǎn)單來說就是由動(dòng)作的執(zhí)行者變?yōu)閯?dòng)作的操控者。面向?qū)ο笫窍鄬?duì)于面向過程的。面向?qū)ο笕筇卣髅嫦驅(qū)ο笥腥筇卣?,即封裝繼承和多態(tài)。接口和抽象類接口接口名方法方法,默認(rèn)修飾符為,不能用其他修飾符修飾接口。 面向?qū)ο缶幊趟枷?面向?qū)ο?,?jiǎn)單來說就是由動(dòng)作的執(zhí)行者變?yōu)閯?dòng)作的操控者。結(jié)合具體例子來說就是使用某個(gè)人或者工具所具有的功能而不用去管功能的具體實(shí)現(xiàn)方式。例如現(xiàn)實(shí)中...

    William_Sang 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<