日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

JAVA入门级教学之(多态)

發(fā)布時(shí)間:2024/7/23 编程问答 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 JAVA入门级教学之(多态) 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

JAVA入門級(jí)教學(xué)之(多態(tài))

?

怎么理解多態(tài):你本身就該喊你爹叫爹,你讓你爹叫你爹就是強(qiáng)制認(rèn)做爹

?

?

多態(tài)的使用:

A? a = new D();

D類繼承A類,父類型引用指向子類型對(duì)象


?* 關(guān)于java語(yǔ)言匯總的多態(tài)語(yǔ)法機(jī)制:【只是多態(tài)的基礎(chǔ)語(yǔ)法,多態(tài)的作用后續(xù)說(shuō)明】
?*?
?* ?? ?1.多態(tài)中設(shè)計(jì)的幾個(gè)概念
?*?
?* ?? ??? ?*向上轉(zhuǎn)型(upcasting)
?* ?? ??? ??? ?子類型轉(zhuǎn)父類型:自動(dòng)類型轉(zhuǎn)換
?* ?? ??? ?
?* ?? ??? ?*向下轉(zhuǎn)型(downcasting)
?* ?? ??? ??? ?父類型轉(zhuǎn)子類型:強(qiáng)制類型轉(zhuǎn)換【需要加強(qiáng)制類型轉(zhuǎn)換符】
?*?
?* ?? ?2.無(wú)論是向上轉(zhuǎn)型還是向下轉(zhuǎn)型,兩種類型之間必須存在繼承關(guān)系
?*?
?* ?? ? ?*沒(méi)有繼承關(guān)系,程序是無(wú)法編譯通過(guò)的

?

代碼演示:

?

public class Test {public static void main(String[] args) {//使用多態(tài)語(yǔ)法機(jī)制/** 1.Animal和cat之間存在繼承關(guān)系,Animal是父類,Cat是子類*?* 2.Cat is a Animal是合理的*?* 3.new Cat() 創(chuàng)建的對(duì)象類型是Cat,a2這個(gè)引用的數(shù)據(jù)類型是Animal,可見(jiàn)* ? 它們進(jìn)行了類型轉(zhuǎn)換:子類型轉(zhuǎn)換成父類型,稱為向上轉(zhuǎn)型/upcasting,稱為自動(dòng)類型轉(zhuǎn)換* ??* 4.java中允許這種語(yǔ)法:父類型引用指向子類型對(duì)象 ?*/Animal a2=new Cat();/** 1.java程序永遠(yuǎn)都分為編輯階段和運(yùn)行階段*?* 2.先分析編譯階段,再分析運(yùn)行階段,如果編譯無(wú)法通過(guò),根本是無(wú)法運(yùn)行的*?* 3.編譯階段編譯器檢查a2這個(gè)引用的數(shù)據(jù)類型為Animal,由于Animal.class* ?? ? 的字節(jié)碼中有move()方法,所以編譯通過(guò)了。這個(gè)過(guò)程我們稱為靜態(tài)綁定【編譯階段綁定】* ?? ? 只有靜態(tài)綁定成功后才有后續(xù)的運(yùn)行*?* 4.在程序運(yùn)行階段,JVM堆內(nèi)存中真實(shí)創(chuàng)建的對(duì)象是Cat對(duì)象,那么以下程序在運(yùn)行階段* ?? ? 一定會(huì)調(diào)用Cat對(duì)象的move()方法,此時(shí)發(fā)生了程序的動(dòng)態(tài)綁定【運(yùn)行階段綁定】* ?? ?* 5.無(wú)論是Cat類中有沒(méi)有重寫move方法,運(yùn)行階段一定調(diào)用的是Cat對(duì)象的move方法,因?yàn)? ?? ? 底層真實(shí)的對(duì)象就是Cat對(duì)象*?* 6.父類型引用指向子類型對(duì)象這種機(jī)制導(dǎo)致程序存在編譯階段和運(yùn)行階段綁定兩種不同的形態(tài)* ? 這種機(jī)制就叫做多態(tài)語(yǔ)法機(jī)制*/

---------------------------------------------------------------------------------------------------------------------------------------------------------------?

新建一個(gè)動(dòng)物類?

package com.lbj.javase11;public class Animal {public void move(){System.out.println("動(dòng)物都可以移動(dòng)");}}

新建一個(gè)鳥(niǎo)類繼承動(dòng)物類?

package com.lbj.javase11;public class Bird extends Animal {public void move(){System.out.println("鳥(niǎo)會(huì)飛");}//子類特有的行為public void fly(){System.out.println("fly method");} }

?新建一個(gè)貓類繼承動(dòng)物類

package com.lbj.javase11;public class Cat extends Animal{//重寫父類中繼承過(guò)來(lái)的方法public void move(){System.out.println("貓會(huì)走貓步");}//不是父類中繼承過(guò)來(lái)的方法//這個(gè)方法是子類對(duì)象特有的行為【不是說(shuō)所有的動(dòng)物都能抓老鼠】public void catchMouse(){System.out.println("貓抓老鼠");} }

?新建一個(gè)測(cè)試類:

package com.lbj.javase11; /*** 你本身就該就你爹叫爹,你讓你爹叫你爹就是強(qiáng)制認(rèn)做爹* * 關(guān)于java語(yǔ)言匯總的多態(tài)語(yǔ)法機(jī)制:【只是多態(tài)的基礎(chǔ)語(yǔ)法,多態(tài)的作用后續(xù)說(shuō)明】* * 1.多態(tài)中設(shè)計(jì)的幾個(gè)概念* * *向上轉(zhuǎn)型(upcasting)* 子類型轉(zhuǎn)父類型:自動(dòng)類型轉(zhuǎn)換* * *向下轉(zhuǎn)型(downcasting)* 父類型轉(zhuǎn)子類型:強(qiáng)制類型轉(zhuǎn)換【需要加強(qiáng)制類型轉(zhuǎn)換符】* * 2.無(wú)論是向上轉(zhuǎn)型還是向下轉(zhuǎn)型,兩種類型之間必須存在繼承關(guān)系* * *沒(méi)有繼承關(guān)系,程序是無(wú)法編譯通過(guò)的* @author 14811****/ public class Test {public static void main(String[] args) {//使用多態(tài)語(yǔ)法機(jī)制/** 1.Animal和cat之間存在繼承關(guān)系,Animal是父類,Cat是子類* * 2.Cat is a Animal是合理的* * 3.new Cat() 創(chuàng)建的對(duì)象類型是Cat,a2這個(gè)引用的數(shù)據(jù)類型是Animal,可見(jiàn)* 它們進(jìn)行了類型轉(zhuǎn)換:子類型轉(zhuǎn)換成父類型,稱為向上轉(zhuǎn)型/upcasting,稱為自動(dòng)類型轉(zhuǎn)換* * 4.java中允許這種語(yǔ)法:父類型引用指向子類型對(duì)象 */Animal a2=new Cat();/** 1.java程序永遠(yuǎn)都分為編輯階段和運(yùn)行階段* * 2.先分析編譯階段,再分析運(yùn)行階段,如果編譯無(wú)法通過(guò),根本是無(wú)法運(yùn)行的* * 3.編譯階段編譯器檢查a2這個(gè)引用的數(shù)據(jù)類型為Animal,由于Animal.class* 的字節(jié)碼中有move()方法,所以編譯通過(guò)了。這個(gè)過(guò)程我們稱為靜態(tài)綁定【編譯階段綁定】* 只有靜態(tài)綁定成功后才有后續(xù)的運(yùn)行* * 4.在程序運(yùn)行階段,JVM堆內(nèi)存中真實(shí)創(chuàng)建的對(duì)象是Cat對(duì)象,那么以下程序在運(yùn)行階段* 一定會(huì)調(diào)用Cat對(duì)象的move()方法,此時(shí)發(fā)生了程序的動(dòng)態(tài)綁定【運(yùn)行階段綁定】* * 5.無(wú)論是Cat類中有沒(méi)有重寫move方法,運(yùn)行階段一定調(diào)用的是Cat對(duì)象的move方法,因?yàn)? 底層真實(shí)的對(duì)象就是Cat對(duì)象* * 6.父類型引用指向子類型對(duì)象這種機(jī)制導(dǎo)致程序存在編譯階段和運(yùn)行階段綁定兩種不同的形態(tài)* 這種機(jī)制就叫做多態(tài)語(yǔ)法機(jī)制*/a2.move();/** 分析以下程序?yàn)槭裁床荒苷{(diào)用:* 因?yàn)榫幾g階段編譯器檢查到a2的類型是Animal類型* 從Animal.class字節(jié)碼文件中查找catchMouse()方法,最終沒(méi)有找到該方法* 導(dǎo)致靜態(tài)綁定失敗,沒(méi)有綁定成功,也就是說(shuō)編譯失敗了,更別說(shuō)運(yùn)行了*///a2.catchMouse();/** 假設(shè)想讓以上的對(duì)象執(zhí)行catchMouse()方法 ,怎么辦?* a2是無(wú)法直接調(diào)用的,因?yàn)閍2的類型Animal,Animal中沒(méi)有catchMouse()方法* 我們可以將a2強(qiáng)制類型轉(zhuǎn)換成Cat類型* a2的類型是Animal(父類),轉(zhuǎn)換成Cat類型(子類),被稱為向下轉(zhuǎn)型/downCasting/強(qiáng)制類型轉(zhuǎn)換* * 注:向下轉(zhuǎn)型也需要兩種類型之間必須有繼承關(guān)系,不然編譯報(bào)錯(cuò)。強(qiáng)制類型轉(zhuǎn)換需要加強(qiáng)制類型轉(zhuǎn)換符** 什么時(shí)候需要使用向下轉(zhuǎn)型呢?* 當(dāng)調(diào)用的方法是子類型中特有的,在父類型中不存在,必須進(jìn)行向下轉(zhuǎn)型*/Cat c2=(Cat)a2;c2.catchMouse();//----------------------------------Animal a3=new Bird();/** 1.以下程序編譯是沒(méi)有問(wèn)題的,因?yàn)榫幾g器檢查到a3的數(shù)據(jù)類型是Animal* Animal和Cat之間存在繼承關(guān)系,并且Animal是父類型,Cat是子類型* 父類型轉(zhuǎn)換成子類型叫做向下轉(zhuǎn)型,語(yǔ)法合格* * 2.雖然程序通過(guò)了,但是程序在運(yùn)行階段會(huì)出現(xiàn)異常,因?yàn)镴VM堆內(nèi)存中* 真實(shí)存在的對(duì)象是Bird類型,Bird對(duì)象無(wú)法轉(zhuǎn)換成Cat對(duì)象,因?yàn)閮煞N* 類型之間不存在任何繼承關(guān)系,此時(shí)出現(xiàn)了著名的異常* java.lang.ClassCastException:* 類型轉(zhuǎn)換異常,這種異常總是在"向下轉(zhuǎn)型"的時(shí)候會(huì)發(fā)生*///Cat c3=(Cat)a3;//--------------------------------------------/** 1.以上異常只有在強(qiáng)制類型轉(zhuǎn)換的時(shí)候會(huì)發(fā)生,也就是說(shuō)"向下轉(zhuǎn)型"存在隱患(編譯通過(guò)了,但是運(yùn)行出錯(cuò)了)* * 2.向上轉(zhuǎn)型只要編譯通過(guò),運(yùn)行一定不會(huì)出問(wèn)題* * 3.向下轉(zhuǎn)型編譯通過(guò),運(yùn)行可能錯(cuò)誤* * 4.怎么避免向下轉(zhuǎn)型出現(xiàn) java.lang.ClassCastException:呢?* -使用instanceof運(yùn)算符可以避免出現(xiàn)以上的異常* * 5.instanceof運(yùn)算符怎么用?* -5.1語(yǔ)法格式:* (引用名 instanceof 數(shù)據(jù)類型名)* * -5.2以上運(yùn)算符的執(zhí)行結(jié)果類型是布爾類型,結(jié)果可能是true/false* * -5.3關(guān)于運(yùn)算結(jié)果true/false* 假設(shè):(a instanceof Animal)* true表示:* a這個(gè)引用指向的對(duì)象是一個(gè)Animal類型* false表示:* a這個(gè)引用指向的對(duì)象不是一個(gè)Animal類型* * 6.java規(guī)范中要求:在進(jìn)行強(qiáng)制類型轉(zhuǎn)換之前,建議采用 instancsof運(yùn)算符進(jìn)行判斷,避免異常的發(fā)生*///當(dāng)a3引用指向的對(duì)象卻是是一個(gè)Cat的時(shí)候【等同于:a3 是Cat的實(shí)例嗎? 】{ // Cat c3=(Cat)a3;//}if(a3 instanceof Cat){Cat c3=(Cat)a3;//這時(shí)候編譯器就會(huì)檢測(cè)}else if(a3 instanceof Bird){//a3確實(shí)是Bird類的,所以再?gòu)?qiáng)制轉(zhuǎn)換就會(huì)成功Bird b2=(Bird)a3;b2.fly();}}}

?

總結(jié)

以上是生活随笔為你收集整理的JAVA入门级教学之(多态)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 肌肉猛男裸体gay网站免费 | 爽爽淫人| 天天碰免费视频 | 狠狠ri | 性欧美视频 | 国产精品三级久久久久久电影 | 51吃瓜网今日吃瓜 | 8x8ⅹ国产精品一区二区二区 | 久久中文字幕高清 | 亚洲视频六区 | 无码人妻精品丰满熟人区 | 免费特级黄色片 | 日韩图色 | 免费a级黄色片 | 人人曰 | 黑人一级视频 | 波多野结衣调教 | 日韩免费观看一区二区 | 97se在线视频 | 欧美三级影院 | 亚洲视频在线观看网址 | 免费国产黄 | 中文字幕精品无 | 91在线高清视频 | 国产乱人乱精一区二视频国产精品 | 奇米影视奇米色 | 91网入口| 在线视频97 | 伊人国产在线观看 | 丁香四月婷婷 | 狂野欧美性猛交免费视频 | 韩日视频一区 | 91在线视频导航 | 久久精品视频网站 | 日日日日日日bbbbbb | 免费又黄又爽又猛大片午夜 | 美女洗澡隐私免费网站 | 国产精品mv | 午夜精品久久久久久久久久久 | 国产一区二区久久久 | 一区二区在线观看视频 | 亚洲欧洲综合av | 欧美色炮 | 波多野结衣乳巨码无在线 | 美女网站污 | 精品视频久久久久久 | 污污的视频在线免费观看 | 毛片毛片毛片毛片毛片毛片毛片毛片毛片 | 人妻 日韩 欧美 综合 制服 | 激情超碰 | 国产精品自产拍高潮在线观看 | 天天爽天天搞 | 欧美日韩卡一卡二 | 天天在线观看 | 午夜综合 | 在线观看黄色大片 | 国产精品成人在线观看 | 蜜桃又黄又粗又爽av免 | 中文精品久久 | 青青青av | 日本一区二区三区视频在线播放 | 日日干,夜夜操 | 日日爽爽 | 天天做天天操 | 美女脱衣服一干二净 | 九九热视频这里只有精品 | 欧美三级一级 | 亚洲精品乱码久久久久久自慰 | 天堂中文在线免费观看 | 久久精品久久久久 | 国产综合在线视频 | 免费三级在线 | 欧美另类tv | 国产精品美女久久久久久久久 | 四虎精品在线播放 | 在线播放日本 | 亚洲日b视频 | 欧美日韩国产在线观看 | 色呦呦影院 | 国产精品一区二区三区在线看 | 一区二区伦理 | 韩国女主播一区二区 | 欧美日韩亚洲国产另类 | 国产精品成人久久久 | 国产av无码专区亚洲a∨毛片 | 色哟哟视频在线 | 在线观看色网站 | 91传媒网站| 日韩电影中文字幕在线观看 | 亚洲a图| 国产夫妻在线观看 | 狠狠干男人的天堂 | 成人αv| 桃谷绘里香番号 | 亚洲国产理论 | 午夜在线成人 | 免费无码毛片一区二三区 | 国产无遮掩 | 少妇精品高潮欲妇又嫩中文字幕 |