Java基礎入門之多態和對象類型轉換

2021-02-16 Java進階學習交流

後臺回復「Java」即可獲贈Java學習資料

    前面幾篇文章用Java帶大家一起了解Java的部分基礎知識,感興趣的小夥伴們可以去學習下了,一篇文章帶你了解Java類的設計和封裝及類成員的訪問控制、一篇文章帶你了解this關鍵字和單例模式、Java基礎入門篇——面向對象和類的定義,這篇文章帶大家一起學習下Java知識中的接口及其繼承知識,一起來看看吧。


一、多態

1.假設實現一個動物發出的叫聲方法,我們知道不同的動物,它們的叫聲是不一樣的。當在方法中傳入一個參數類型,例如貓的叫聲、狗的叫聲。在同一個方法,當參數不同它們的執行結果各不相同,這就是多態。

2.多態是把子類對象賦給父類引用時,調用重寫的方法時,表示的是子類的行為。

3.怎麼實現多態例子

interface Fruit{    void info();}class Cherry implements Fruit{    double weight=66;        public void info(){        System.out.println("我是一個櫻桃!"+"重量為:"+weight+"g");  }}class Apple implements Fruit{    double weight=250;        public void info(){        System.out.println("我是一個蘋果!"+"重量為:"+weight+"g");  }}public class p30 {    public static void main(String[] args) {                Fruit f1=new Cherry();        Fruit f2=new Apple();        fruitInfo(f1);        fruitInfo(f2);}        public static void fruitInfo(Fruit f){        f.info();  }}

運行的結果是:

我是一個櫻桃!重量為:66.0g我是一個蘋果!重量為:250.0g

從上面代碼中,定義了一個Fruit接口,定義了抽象方法info()。定義Cherry類和Apple類實現Fruit接口,定義變量weight屬性和實現info()方法。「Fruit f1=new Cherry()、Fruit f2=new Apple()」實現子類對象賦給父類引用,調用fruitInfo()方法,父類引用了兩個子類對象分別傳入f1和f2參數。


二、對象類型轉換

1.子類對象是可以自動轉換成父類。

2.父類轉換成子類對象就需要強制轉換。

例如:

interface Fruit{    void info();}class Cherry implements Fruit{    double weight=66;        public void info(){        System.out.println("我是一個櫻桃!"+"重量為:"+weight+"g");}        void pro(){        System.out.println("產地:浙江");  }}public class p31 {    public static void main(String[] args) {                Fruit f1=new Cherry();        fruitInfo(f1);}        public static void fruitInfo(Fruit f){        f.info();        f.pro();  }}

運行的結果是:

從上面可以看出編譯出錯了,調用fruitInfo()方法傳入Cherry對象,方法參數是Fruit類型的,把Cherry的子類當作父類使用導致程序編譯出現錯誤,程序在運行到f.pro()這行代碼發現這個方法沒有定義。因為傳入的是Cherry類,在Cherry類中定義了pro()方法需要強制轉換才可以運行,就是把Fruit類型變量強制轉換成Cherry類型。

修改後代碼如下所示:

    public static void fruitInfo(Fruit f){        Cherry f1=(Cherry)f;        f1.info();        f1.pro();}

再次運行的結果是:

三、instanceof關鍵字

1.instanceof關鍵字作用

判斷一個實例對象是否屬於一個類,它的語法如下:

2.在進行引用類型轉換前先使用instanceof關鍵字判斷,例如:

if( f instanceof Cherry){       Cherry f1=(Cherry)f;}

四、總結

本文主要介紹了多態、對象類型轉換、instanceof關鍵字。

多態是子類對象賦給父類引用時,調用重寫的方法時,表示的是子類的行為。通過怎麼實現多態例子幫助理解這個用法。

對象類型轉換是子類對象是可以自動轉換成父類、父類轉換成子類對象就需要強制轉換。

instanceof關鍵字用來判斷一個實例對象是否屬於一個類,希望大家通過本文的學習,對你有所幫助!

------------------- End -------------------

往期精彩文章推薦:

歡迎大家點讚,留言,轉發,轉載,感謝大家的相伴與支持

想加入Java學習群請在後臺回復【入群

萬水千山總是情,點個【在看】行不行

相關焦點

  • java多態
    多態在設計一個方法時,通常希望該方法具備一定的通用性。例如要實現一個動物叫的方法,由於每種動物的叫聲是不同的,因此可以在方法中接收一個動物類型的參數,當傳入貓類對象時就發出貓類的叫聲,傳入犬類對象時就發出犬類的叫聲。在同一個方法中,這種由於參數類型不同而導致執行效果各異的現象就是多態。繼承是多態得以實現的基礎。
  • Java基礎知識學習:Java三大特效之多態!
    多態體現的格式:父類類型 變量名 = new 子類/實現類構造器;變量名.方法名();多態的前提:有繼承關係,子類對象是可以賦值給父類類型的變量。例如Animal是一個動物類型,而Cat是一個貓類型。,showAnimalEat方法的Animal類型,是Cat和Dog的父類類型,父類類型接收子類對象,當然可以把Cat對象和Dog對象,傳遞給方法。
  • Java基礎入門篇之面向對象和類的定義
    Java基礎入門篇之面向對象和類的定義 本文主要介紹了面向對象概念,面向對象的三個特點封裝性、繼承性、多態性。類的定義和創建對象與使用。詳細的介紹了怎麼去定義一個類,通過案例來理解怎麼去定義的。對象的創建與使用介紹了使用的格式,通過創建對象後,可以通過對象的引用來訪問對象的成員。
  • Java 中的繼承和多態(深入版)
    在這三個特性中,如果沒有封裝和繼承,也不會有多態。那麼多態實現的途徑和必要條件是什麼呢?以及多態中的重寫和重載在JVM中的表現是怎麼樣?在Java中是如何展現繼承的特性呢?對於子類繼承於父類時,又有什麼限制呢?本文系基礎,深入淺出過一遍 Java 中的多態和繼承。多態是同一個行為具有多個不同表現形式或形態的能力。
  • Java面試總結之Java基礎
    封裝表面上看就把描述一個對象的屬性和行為封裝成一個類,把業務邏輯封裝成方法,封裝的另一層含義在於通過修飾符控制類的訪問屬性(公有,私有等)。繼承主要是實現了代碼的復用,所有子類公用的行為和屬性可以抽取為一個父類,所有子類繼承了父類的屬性和行為,java中繼承是單一性的。
  • java基礎案例之java語言組成和數據類型與強制類型轉換語法
    java語言組成包含:1:關鍵字,2:標識符。3:注釋。4:常量和變量。5:運算符 。 6:語句 7:函數 8:數組。java數據類型定義變量格式:數據類型 變量名 =初始化值;例如:int x =4;
  • Java面向對象中的封裝和訪問控制符詳解
    封裝面向對象編程有三大概念:封裝、繼承、多態,今天我們就先從封裝開始講起。封裝(Encapsulation)是面向對象方法的重要原則,就是把對象的屬性和操作(或服務)結合為一個獨立的整體,並儘可能隱藏對象的內部實現細節。封裝是把過程和數據包圍起來,對數據的訪問只能通過已定義的接口。
  • Java基礎學習心得筆記
    面向過程就是把你的代碼封裝成函數,然後依次去做一件事情,面向過程是把你要做的事情抽象成對象,告訴對象去做。所以要想學好java入門,必須知道類和對象的概念。類是對生活中事物的抽象描述,比如人類,動物類,交通工具類;對象即是對類的具體實例化,比如張三是人,貓是動物,飛機是交通工具(對象類)。
  • Java面向對象之final、abstract抽象、和變量生命周期
    只要滿足以下條件就可以考慮把一個類設計成final類:在設計之初就考慮不進入繼承體系的類。出於安全考慮,類的實現細節不允許被拓展和修改。比如:基本數據類型的包裝類就是一個典型的例子。該類不會再被拓展。java裡final修飾的類有很多,比如八大基本數據類型的包裝類(Byte,Character、Short、Integer、Long、Float、Double、Boolean)和String等。
  • 【編程基礎】如何理解java中的多態
    大家都知道Java面向對象有幾大特徵:抽象、封裝、繼承和多態,Java的這些特性讓Java變得很強大,可以很輕鬆的勝任比較複雜的項目開發。今天重點給大家說說多態這個特性。多態總結起來發生的場景就是兩類:1、對象運行時確定是子類還是父類;2、方法運行時確定調用同名的哪個方法;也就是指程序中定義的引用變量所指向的具體類型和通過該引用變量發出的方法調用在編程時並不確定,而是在程序運行期間才確定,即一個引用變量倒底會指向哪個類的實例對象,該引用變量發出的方法調用到底是哪個類中實現的方法,必須在由程序運行期間才能決定。
  • Java多態性:Java什麼是多態?
    多態性是面向對象編程的又一個重要特徵,它是指在父類中定義的屬性和方法被子類繼承之後,可以具有不同的數據類型或表現出不同的行為,這使得同一個屬性或方法在父類及其各個子類中具有不同的含義
  • Java 類型信息詳解和反射機制
    從入門到精通實戰課程分享1、RTTIRTTI(RunTime Type Information)運行時類型信息,能夠在程序運行時發現和使用類型信息,把我們從只能在編譯期知曉類型信息並操作的局限中解脫出來傳統的多態機制正是 RTTI 的基本使用:假設有一個基類 Shape 和它的三個子類 Circle、Square、Triangle,現在要把
  • Java多態的實現機制是什麼,寫得非常好!
    ,而程序調用的方法在運行期才動態綁定,就是引用變量所指向的具體實現對象的方法,也就是內存裡正在運行的那個對象的方法,而不是引用變量的類型中定義的方法。淺談多態機制的意義及實現在面向對象編程(Object-Oriented Programming, OOP)中,多態機制無疑是其最具特色的功能,甚至可以說,不運用多態的編程不能稱之為OOP。這也是為什麼有人說,使用面向對象語言的編程和面向對象的編程是兩碼事。
  • Java面向對象之枚舉——enum
    Java面向對象之枚舉——enum引出枚舉首先來考慮這樣一個需求:判斷一個員工(Employee)在一周的哪一天休息。Java 枚舉從Java 5 開始,提供了一種新的數據類型,枚舉。和接口一樣,枚舉是一個特殊的類,其實質上就是數量固定的多個常量對象的集合。枚舉主要用來表示固定的事務類型。枚舉語法定義格式:常量之間使用英文狀態下的「,」分隔,最後一個常量之後必須要用「;」結尾。
  • 面向對象特性之三:多態(Python進階教程)
    今天我們要講一講面向對象的第三個特性:多態;什麼叫做多態?從字面意思上理解,就是一個函數具有多種形態。本質上其實就是同一操作方法作用於不同的對象時,有著不同的解釋,執行不同的邏輯,產生不同的結果。今天我們還是用例子來說明在Python中多態的使用方法、注意事項和使用的優點。
  • Java基礎入門之異常、異常分類、異常防護解析
    這篇文章我們主要介紹Java基礎入門之異常、異常分類、異常防護知識,一起來學習下吧!一、異常(一)什麼是異常在我們現實生活中,例如感冒發燒、電腦突然出現藍屏等,在程序中也會出現不正常的情況,例如磁碟不足、網絡中斷等,像我們手機有時候微信會出現彈窗提示無法響應。
  • Java面向對象程序設計的基本概念
    面向對象的程序設計涉及到對象、封裝、類、繼承及多態等幾個基本概念。
  • Java 重載、重寫、構造函數詳解
    重寫方法可以實現多態,用父類的引用來操縱子類對象,但是在實際運行中對象將運行其自己特有的方法。請牢記,多態只看父類引用的方法,而不看子類對象的方法!方法的重載重載是友好的,它不要求你在調用一個方法之前轉換數據類型,它會自動地尋找匹配的方法。方法的重載是在編譯時刻就決定調用哪個方法了,和重寫不同。最最常用的地方就是構造器的重載。1、基本數據類型參數的重載。/** * Java學習交流QQ群:589809992 我們一起學Java!
  • 每周 10 道 Java 面試題 : 面向對象, 類加載器, JDBC, Spring 基礎概念
    面試題答案討論請移步:https://github.com/jobbole/java-interview/issues/1Java面試題投遞交流請移步:https://github.com/jobbole/java-interview/issues/21. 為什麼說Java是一門平臺無關語言?
  • 面試題之java基礎
    5、java中,throw和throws 有什麼區別:答:throw 用於拋出 java.lang.Throwable 類的一個實例化對象,意思是說你可以通過關鍵字 throw 拋出一個Exception,如:throw new IllegalArgumentException(「XXXXXXXXX″)而throws 的作用是作為方法聲明和籤名的一部分,方法被拋出相應的異常以便調用者能處理