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

詳細(xì)講述Java中的對象轉(zhuǎn)型

 更新時間:2018年10月15日 15:46:40   投稿:laozhang  
在本篇文章里我們給大家詳細(xì)分享了關(guān)于Java中的對象轉(zhuǎn)型的知識點(diǎn)內(nèi)容,有興趣的朋友們學(xué)習(xí)下。

向上轉(zhuǎn)型:子類對象轉(zhuǎn)為父類,父類可以是接口。公式:Father f = new Son();Father是父類或接口,son是子類。

向下轉(zhuǎn)型:父類對象轉(zhuǎn)為子類。公式:Son s = (Son)f;

我們將形參設(shè)為父類Animal類型,當(dāng)執(zhí)行test.f(c)時,內(nèi)存情況如下圖:

c作為Cat類型傳入,Animal a作為形參,相當(dāng)于執(zhí)行了Animal a = new Cat(),這時a和c同時指向Cat對象,但此時a不能訪問Cat類擴(kuò)展的數(shù)據(jù)成員,所以再將a強(qiáng)轉(zhuǎn)成Cat類型即可。如果不存在這樣的轉(zhuǎn)型機(jī)制,則針對貓和狗我們還要分別寫兩個函數(shù)f(Cat c)和f(Dog d)。但其實上圖程序的可擴(kuò)展性也不是最好的。我們還可以利用動態(tài)綁定(即多態(tài))將擴(kuò)展性進(jìn)一步提升。多態(tài)機(jī)制的三個前提分別是:

(1)要有繼承

(2)要重寫,即子類對父類中某些方法進(jìn)行重新定義

(3)要向上轉(zhuǎn)型,用父類引用指向子類對象。

下面來看一個例子:

class Animal { private String name; /**
  * 在Animal類自定義的構(gòu)造方法
  * @param name  */
 Animal(String name) {  this.name = name;
 } /**
  * 在Animal類里面自定義一個方法enjoy  */
 public void enjoy() {
  System.out.println("動物的叫聲……");
 }
}class Cat extends Animal { private String eyesColor; /**
  * 在子類Cat里面定義Cat類的構(gòu)造方法
  * @param n
  * @param c  */
 Cat(String n, String c) {  /**
   * 在構(gòu)造方法的實現(xiàn)里面首先使用super調(diào)用父類Animal的構(gòu)造方法Animal(String name)。
   * 把子類對象里面的父類對象先造出來。   */
  super(n);
  eyesColor = c;
 } /**
  * 子類Cat對從父類Animal繼承下來的enjoy方法不滿意,在這里重寫了enjoy方法。  */
 public void enjoy() {
  System.out.println("我養(yǎng)的貓高興地叫了一聲……");
 }
}/**
 * 子類Dog從父類Animal繼承下來,Dog類擁有了Animal類所有的屬性和方法。
 * @author gacl
 * */class Dog extends Animal { /**
  * 在子類Dog里面定義自己的私有成員變量  */
 private String furColor; /**
  * 在子類Dog里面定義Dog類的構(gòu)造方法
  * @param n
  * @param c  */
 Dog(String n, String c) {  /**
   * 在構(gòu)造方法的實現(xiàn)里面首先使用super調(diào)用父類Animal的構(gòu)造方法Animal(String name)。
   * 把子類對象里面的父類對象先造出來。   */
  super(n);
  furColor = c;
 } /**
  * 子類Dog對從父類Animal繼承下來的enjoy方法不滿意,在這里重寫了enjoy方法。  */
 public void enjoy() {
  System.out.println("我養(yǎng)的狗高興地叫了一聲……");
 }
}/**
 * 子類Bird從父類Animal繼承下來,Bird類擁有Animal類所有的屬性和方法
 * @author gacl
 * */class Bird extends Animal { /**
  * 在子類Bird里面定義Bird類的構(gòu)造方法  */
 Bird() {  /**
   * 在構(gòu)造方法的實現(xiàn)里面首先使用super調(diào)用父類Animal的構(gòu)造方法Animal(String name)。
   * 把子類對象里面的父類對象先造出來。   */
  super("bird");
 } /**
  * 子類Bird對從父類Animal繼承下來的enjoy方法不滿意,在這里重寫了enjoy方法。  */
 public void enjoy() {
  System.out.println("我養(yǎng)的鳥高興地叫了一聲……");
 }
}/**
 * 定義一個類Lady(女士)
 * @author gacl
 * */class Lady { /**
  * 定義Lady類的私有成員變量name和pet  */
 private String name; private Animal pet; /**
  * 在Lady類里面定義自己的構(gòu)造方法Lady(),
  * 這個構(gòu)造方法有兩個參數(shù),分別為String類型的name和Animal類型的pet,
  * 這里的第二個參數(shù)設(shè)置成Animal類型可以給我們的程序帶來最大的靈活性,
  * 因為作為養(yǎng)寵物來說,可以養(yǎng)貓,養(yǎng)狗,養(yǎng)鳥,只要是你喜歡的都可以養(yǎng),
  * 因此把它設(shè)置為父類對象的引用最為靈活。
  * 因為這個Animal類型的參數(shù)是父類對象的引用類型,因此當(dāng)我們傳參數(shù)的時候,
  * 可以把這個父類的子類對象傳過去,即傳Dog、Cat和Bird等都可以。
  * @param name
  * @param pet  */
 Lady(String name, Animal pet) {  this.name = name;  this.pet = pet;
 } /**
  * 在Lady類里面自定義一個方法myPetEnjoy()
  * 方法體內(nèi)是讓Lady對象養(yǎng)的寵物自己調(diào)用自己的enjoy()方法發(fā)出自己的叫聲。  */
 public void myPetEnjoy() {
  pet.enjoy();
 }
}public class Jerque { public static void main(String args[]) {  /**
   * 在堆內(nèi)存里面new了一只藍(lán)貓對象出來,這個藍(lán)貓對象里面包含有一個父類對象Animal。   */
  Cat c = new Cat("Catname", "blue");  /**
   * 在堆內(nèi)存里面new了一只黑狗對象出來,這個黑狗對象里面包含有一個父類對象Animal。   */
  Dog d = new Dog("Dogname", "black");  /**
   * 在堆內(nèi)存里面new了一只小鳥對象出來,這個小鳥對象里面包含有一個父類對象Animal。   */
  Bird b = new Bird();  /**
   * 在堆內(nèi)存里面new出來3個小姑娘,名字分別是l1,l2,l3。
 * l1養(yǎng)了一只寵物是c(Cat),l2養(yǎng)了一只寵物是d(Dog),l3養(yǎng)了一只寵物是b(Bird)。
   * 注意:調(diào)用Lady類的構(gòu)造方法時,傳遞過來的c,d,b是當(dāng)成Animal來傳遞的,
   * 因此使用c,d,b這三個引用對象只能訪問父類Animal里面的enjoy()方法。   */
  Lady l1 = new Lady("l1", c);
  Lady l2 = new Lady("l2", d);
  Lady l3 = new Lady("l3", b);  /**
   * 這三個小姑娘都調(diào)用myPetEnjoy()方法使自己養(yǎng)的寵物高興地叫起來。   */
  l1.myPetEnjoy();
  l2.myPetEnjoy();
  l3.myPetEnjoy();
 }
}

上面的例子中,我們發(fā)現(xiàn),如果我們想要加入新的動物,只需定義相應(yīng)的類繼承Animal,完全不用動任何一處代碼,因為這里運(yùn)用了面向?qū)ο笞詈诵牡臇|西——多態(tài)。與之前的例子不同,雖然我們一直強(qiáng)調(diào)當(dāng)用父類的引用指向子類對象,父類無法訪問子類自己的成員,但是方法與數(shù)據(jù)成員不同,具體調(diào)哪一個方法是等到運(yùn)行時決定的,new出了什么對象就調(diào)用相應(yīng)對象的方法,取決于實際new出的對象而不是指向?qū)ο蟮囊茫援?dāng)傳入不同動物類型,mypetEnjoy()就會去執(zhí)行不同的方法

相關(guān)文章

  • 詳解如何熱更新線上的Java服務(wù)器代碼

    詳解如何熱更新線上的Java服務(wù)器代碼

    這篇文章主要介紹了詳解如何熱更新線上的Java服務(wù)器代碼,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-04-04
  • Java實現(xiàn)CSV格式轉(zhuǎn)對象

    Java實現(xiàn)CSV格式轉(zhuǎn)對象

    csv全稱“Comma-Separated Values”,是一種逗號分隔值格式的文件,常用來存儲數(shù)據(jù)的純文本格式文件。本文將用Java語言實現(xiàn)CSV轉(zhuǎn)對象,需要的可以參考一下
    2022-06-06
  • RestTemplate發(fā)送請求時Cookie的影響及注意事項說明

    RestTemplate發(fā)送請求時Cookie的影響及注意事項說明

    這篇文章主要介紹了RestTemplate發(fā)送請求時Cookie的影響及注意事項說明,具有很好的參考價值,希望對大家有所幫助。
    2023-07-07
  • Java SE使用數(shù)組實現(xiàn)高速數(shù)字轉(zhuǎn)換功能

    Java SE使用數(shù)組實現(xiàn)高速數(shù)字轉(zhuǎn)換功能

    隨著大數(shù)據(jù)時代的到來,數(shù)字轉(zhuǎn)換功能變得越來越重要,在Java開發(fā)中,數(shù)字轉(zhuǎn)換功能也是經(jīng)常用到的,下面我們就來學(xué)習(xí)一下如何使用Java SE數(shù)組實現(xiàn)高速的數(shù)字轉(zhuǎn)換功能吧
    2023-11-11
  • Struts2學(xué)習(xí)筆記(3)-DMI動態(tài)調(diào)用方式

    Struts2學(xué)習(xí)筆記(3)-DMI動態(tài)調(diào)用方式

    本文主要介紹Struts2的DMI動態(tài)調(diào)用的兩種方式,簡單實用,希望能給大家做一個參考。
    2016-06-06
  • 在Java中使用日志框架log4j的方法

    在Java中使用日志框架log4j的方法

    Log4j有三個主要的組件/對象:Loggers(記錄器),Appenders (輸出源)和Layouts(布局)。這里可簡單理解為日志類別,日志要輸出的地方和日志以何種形式輸出,今天通過本文給大家分享Java日志框架log4j的相關(guān)知識,感興趣的朋友一起看看吧
    2021-08-08
  • Java正則驗證正整數(shù)的方法分析【測試可用】

    Java正則驗證正整數(shù)的方法分析【測試可用】

    這篇文章主要介紹了Java正則驗證正整數(shù)的方法,結(jié)合實例形式對比分析了java針對正整數(shù)的驗證方法及相關(guān)注意事項,需要的朋友可以參考下
    2017-08-08
  • 將一個數(shù)組按照固定大小進(jìn)行拆分成數(shù)組的方法

    將一個數(shù)組按照固定大小進(jìn)行拆分成數(shù)組的方法

    下面小編就為大家?guī)硪黄獙⒁粋€數(shù)組按照固定大小進(jìn)行拆分成數(shù)組的方法。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-11-11
  • SpringBoot系列教程之防重放與操作冪等

    SpringBoot系列教程之防重放與操作冪等

    同一條數(shù)據(jù)被用戶點(diǎn)擊了多次,導(dǎo)致數(shù)據(jù)冗余,需要防止弱網(wǎng)絡(luò)等環(huán)境下的重復(fù)點(diǎn)擊,下面這篇文章主要給大家介紹了關(guān)于SpringBoot系列教程之防重放與操作冪等的相關(guān)資料,需要的朋友可以參考下
    2022-04-04
  • 手把手帶你粗略了解Java--類和對象

    手把手帶你粗略了解Java--類和對象

    這篇文章主要給大家介紹了關(guān)于java中類和對象的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-08-08

最新評論

平凉市| 东乌珠穆沁旗| 高州市| 德阳市| 襄城县| 长沙县| 许昌市| 博客| 宝鸡市| 惠来县| 濉溪县| 措美县| 湄潭县| 武乡县| 即墨市| 会东县| 望都县| 舒兰市| 金川县| 班玛县| 三门县| 上饶县| 祁阳县| 巨野县| 双牌县| 泸州市| 绥阳县| 深水埗区| 磐安县| 瑞昌市| 南汇区| 乌拉特中旗| 会同县| 慈溪市| 时尚| 洛阳市| 卫辉市| 秦皇岛市| 托克托县| 伊宁市| 芦山县|