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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

Java的多态机制

發(fā)布時間:2023/11/28 生活经验 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Java的多态机制 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

多態(tài)

1.概念

多態(tài)是面向?qū)ο蟮娜筇卣髦?#xff0c;指的是一種事物有多種形態(tài),通過多態(tài),我們可以提高程序的擴展力,降低程序的耦合度。

比如說有這樣的一種場景:你養(yǎng)了小動物,小貓,小狗,小鳥,它們都是動物,每個小動物都要吃東西,我們可以設(shè)置它們都有吃的功能,但是它們吃的東西不一樣,所以需要重寫父類的方法。

多態(tài)對象只能調(diào)用父類中定義過的,然后子類中重寫的方法,并不能調(diào)用子類的特有功能。


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

1.向上轉(zhuǎn)型 子----->父(自動類型轉(zhuǎn)換)

2.向下轉(zhuǎn)型 父----->子(強制類型轉(zhuǎn)換)
如果我們想要訪問的方法是子類中特有的方法,我們就要做向下類型轉(zhuǎn)換


3.靜態(tài)綁定和動態(tài)綁定(重點理解)

Java程序有編譯階段和運行階段

現(xiàn)在我通過一個例子,來簡單說明一下

 public class AnimalTest{public static void main(String[]args){Animal a=new Cat();Animal b=new Bird();a.move();}}
class Animal{
// 移動的方法public void move(){System.out.println("動物在移動!!!");}
}
// 鳥兒類,子類
public class Bird extends Animal{// 重寫父類的move方法public void move(){System.out.println("鳥兒在飛翔!!!");}// 也有自己特有的方法public void sing(){System.out.println("鳥兒在歌唱!!!");}}
// 貓類,子類
public class Cat extends Animal{// 對move方法進行重寫public void move(){System.out.println("cat走貓步!");}// 貓除了move之外,應(yīng)該有自己特有的行為,例如抓老鼠。// 這個行為是子類型對象特有的方法。public void catchMouse(){System.out.println("貓正在抓老鼠!!!!");}}
class Dog{
public void move(){System.out.println("狗在散步");
}}

編譯階段:

編譯器只知道a是Animal類型,所以在編譯的時候,編譯器會去Animal.class字節(jié)碼文件去找move()方法,找到了的話,就綁定上move()方法,編譯通過,靜態(tài)綁定成功(編譯階段屬于靜態(tài)綁定)

運行階段:
運行階段,實際上堆內(nèi)存中創(chuàng)建的Java對象是Cat對象,所以運行的時候,真正參與move的對象是一只貓,所以運行階段會動態(tài)執(zhí)行Cat方法的move()方法,這個過程屬于運行階段綁定(運行階段屬于動態(tài)綁定)

總結(jié)來說就是:編譯看左邊,運行看右邊

4. instanceof 關(guān)鍵字

4.1為什么要使用instanceof


4.2使用向下轉(zhuǎn)型的危險

我們在向下轉(zhuǎn)型的時候,最好使用instanceof關(guān)鍵字判斷以后再轉(zhuǎn)型,不然可能出現(xiàn)java.lang.ClassCastException異常

根據(jù)上面已經(jīng)寫的代碼,我接下來,寫一個例子,來說明一下

		Animal a = new Cat();Bird b = (Bird) a;b.sing();

這個時候就會出現(xiàn)異常,雖然編譯的時候不會報錯,但是事實上,a引用底層其實是Cat,而b卻指向了它,所以會報錯,因為Cat里面沒有sing方法

總結(jié)

以上是生活随笔為你收集整理的Java的多态机制的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

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