python簡述對象和類的關系,【零基礎學Java】—對象的向上和向下轉型(二十七)

 2023-10-15 阅读 27 评论 0

摘要:【零基礎學Java】—對象的向上轉型(二十七) 對象的向上轉型,其實就是多態的寫法格式:父類名稱 對象名=new 子類名稱();含義:右側創建一個子類對象,把它當做父類來看待使用注意事項:向上轉型一定是

【零基礎學Java】—對象的向上轉型(二十七)

  • 對象的向上轉型,其實就是多態的寫法
  • 格式:父類名稱 對象名=new 子類名稱();
  • 含義:右側創建一個子類對象,把它當做父類來看待使用
  • 注意事項:向上轉型一定是安全的,從小范圍轉向大范圍
    在這里插入圖片描述
public abstract class Animal {public abstract  void eat();
}
public class Cat extends Animal{@Overridepublic void eat(){System.out.println("貓吃魚");}
}
public class demo01main {public static void main(String[] args) {//對象的向上轉型:就是父類引用指向子類對象Animal animal=new Cat();animal.eat();}
}

在這里插入圖片描述
向上轉型一定是安全的,沒有問題的,正確的,但是也有一個弊端。對象一旦向上轉型為父類,那么就無法調用子類原本特有的內容

解決方案:用對象的向下轉型(還原)
在這里插入圖片描述

二、對象的向下轉型

  • 對象的向下轉型,其實就是一個還原的動作
  • 格式:子類名稱 對象名=(子類名稱) 父類對象;
  • 含義:將父類對象,還原成為本來的子類對象

注意事項:

  • 必須保證對象本來在創建的時候,就是貓,才能向下轉型為貓
  • 如果對象創建的時候本來就不是貓,現在非要向下轉型為貓,就會報錯(ClassCastException)
Animal animal=new Cat();//本來是貓,向上轉型成為動物
Cat cat=(Cat) animal;//本類是貓,已經被當做動物了,還原回來成為本來的貓

在這里插入圖片描述
在這里插入圖片描述

public abstract class Animal {public abstract  void eat();
}
public class Cat extends Animal{@Overridepublic void eat(){System.out.println("貓吃魚");}public void catchMouse(){System.out.println("貓抓老鼠");}
}
public class Dog  extends Animal{@Overridepublic void eat(){System.out.println("狗吃骨頭");}public void watchHouse(){System.out.println("狗看家");}
}
public class demo01main {public static void main(String[] args) {//對象的向上轉型:就是父類引用指向子類對象Animal animal=new Cat();animal.eat();Cat cat=(Cat)animal;cat.catchMouse();//下面是錯誤的向下轉型//本來是new的時候是一只貓 現在非要當做狗//錯誤寫法 編譯不會報錯,但是運行會出現異常//java.lang.ClassCastException,類轉換異常Dog dog=(Dog) animal;}
}

在這里插入圖片描述

三、instanceof關鍵字

如何才能知道一個父類引用的對象,本來是什么子類?

  • 格式:instanceof 類名稱
  • 則將會得到一個boolean值結果,也就是判斷前面的對象能不能當做后面的實例
public class DemoInstanceof {public static void main(String[] args) {Animal animal=new Dog();animal.eat();//如果希望調用子類特有方法  需要向下轉型//判斷一下父類引用animal本來是不是Dogif(animal instanceof Dog){Dog dog=(Dog) animal;dog.watchHouse();}//判斷一下animal 本類是不是Catif(animal instanceof Cat){Cat cat=(Cat) animal;cat.catchMouse();}giveMeAPet(new Dog());}public static void giveMeAPet(Animal animal){if(animal instanceof Dog){Dog dog=(Dog) animal;dog.watchHouse();}//判斷一下animal 本類是不是Catif(animal instanceof Cat){Cat cat=(Cat) animal;cat.catchMouse();}}
}

在這里插入圖片描述

版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。

原文链接:https://hbdhgg.com/5/140552.html

发表评论:

本站为非赢利网站,部分文章来源或改编自互联网及其他公众平台,主要目的在于分享信息,版权归原作者所有,内容仅供读者参考,如有侵权请联系我们删除!

Copyright © 2022 匯編語言學習筆記 Inc. 保留所有权利。

底部版权信息