黑馬程式設計師:Java學科-多態的定義格式以及向上、向下轉型

2020-12-06 啊窩額1

今日內容:

三大特徵---多態引用類型轉換教學目標:

能夠說出使用多態的前提條件理解多態的向上轉型理解多態的向下轉型一、多態

1.概述

引入:多態是繼封裝,繼承之後,面向對象的第三大特性

在日常生活當中以走路跑步為例子,各種動物的不同跑起來是不一樣的。用飛為例子的話,飛機與鳥的飛行也是不一樣的。所以,通過不同的事物,可以體現出來的是不同的形態。多態就是描述這樣的狀態。

定義多態:是指的同一行為具有多個不同表現形式

前提【重點!】

繼承或者是實現【二選其一】方法的重寫【意義體現:不重寫,無意義】父類引用指向子類對象【格式體現】2.多態的體現

多態體現的格式:

父類類型:指子類對象繼承的父類類型,或者是實現父的接口類型

代碼如下所示:

當使用多態方法調用方法的時候,首先要檢查父類中是否有該方法,如果沒有這個方法,那麼編譯錯誤;如果有的話,執行的是子類重寫以後的方法。

定義父類:

定義子類:

定義測試類:

3.多態的好處

我們在實際的開發過程中,父類類型作為方法形式參數,傳遞子類給對象方法,進行方法的調用,更能體現出多態的擴展性與便利,定義父類代碼如下:

定義子類:

定義測試類:

由於多態特性的支持,showAnimalEat方法的Animal類型,是Cat和Dog的父類類型,父類的類型接收子類對象,也可以把Cat對象和Dog對象,傳遞給方法。

當eat方法執行的時候,多態規定,執行的是子類重寫的方法,那麼效果自然就是與showCatEat、showDogEat方法一致,所以showAnimalEat都可以完成

這裡可知多態的好處,體現在於可以讓寫程序變得更簡單,並有良好的拓展

4.引用類型的轉換

多態的轉型分類為向上和向下兩種類型:

向上類型:多態本身就是子類類型的向上轉換的過程,這個過程是默認的

當父類引用指向一個子類對象的時候,就是向上轉型;格式如下:

向下轉型:父類類型向子類類型向下轉換的過程中,這個過程是強制的

一個已經向上轉型的子類對象,將父類引用轉為子類引用,可以使用強制類型轉換的格式,便是向下轉型。使用格式如下:

為什麼要轉型?

當我們子啊使用多態方式去調用方法的時候,首先要檢查父類中是否有這個方法,如果沒有,那麼編譯會出現錯誤。也就是說,不能調用子類擁有,而父類沒有的方法。編譯都是錯誤的,就不要再說運行了。這也是多態給我們的一些小麻煩,所以想要調用子類特有的方法,必須做向下的轉型。

那麼轉型演示的代碼,如下所示:

定義測試

轉型的異常:

轉型的過程中,很容易不小心就遇到這樣的問題,代碼如下:

這段代碼可以通過編譯,但是運行的時候,卻報出了ClassCastException,類型轉換異常!這事因為,我們明明創建了Cat但是在運行的時候,當然態轉換成Dog的對象。這兩個類型並沒有任何繼承的關係,不符合類型轉換的定義。

為了避免ClassCastException這樣的情況,Java提供了一個關鍵字給我們,就是:instanceof,給引用變量做類的校驗,格式如下:

所以我們在轉換之前,最好先自己最一個判斷,如下所示:

下一篇文章我們會給大家分享接口多態的綜合案例,請關注我們哦~

相關焦點

  • Java-類型轉換,使用強制向下轉型解決多態的弊端
    瀏覽器版本過低,暫不支持視頻播放1.1.java的類型轉換1.1.1.java的類型轉換自動向上轉型: 可以直接將子類型引用賦值給父類型變量,可以自動進行,叫做自動向上轉型;例如:class Fu{}class Zi extends Fu{}
  • Java基礎知識學習:Java三大特效之多態!
    當使用多態方式調用方法時,首先檢查父類中是否有該方法,如果沒有,則編譯錯誤。也就是說,不能調用子類擁有,而父類沒有的方法。編譯都錯誤,更別說運行了。這也是多態給我們帶來的一點"小麻煩"。所以,想要調用子類特有的方法,必須做向下轉型。
  • Java多態,對象轉型,和簡單工廠模式 希望對您有幫助!
    各位讀者老爺們大家好鴨~圖圖又來了,今天我們要說一下「多態」。怎麼理解這兩個字呢?可以理解為同一個引用對象的不同表現形態,即將父類的引用指向子類的對象。這是比較官方的書面解釋,大家可以通過自己的理解轉化成自己的話。知道,了解一下就行。大家還需要知道的是:多態是java面向對象的三大特徵之一。
  • 程式設計師:深入理解JVM,從JVM層面來講Java多態
    對多態理解不夠深入的,多半都會答錯;如果能記住口訣:「變量多態看左邊,方法多態看右邊,靜態多態看左邊」的話,肯定就知道答案,但是JVM是如何確定具體調用哪個方法的,有小夥伴思考過嗎?解答這個問題之前,先按如下代碼定義兩個重要的概念。
  • 面試頻率最高的簡單問題——Java類的三大基本特徵
    學習過Java的程式設計師都知道,java類有三大特徵——封裝、繼承和多態。下面的文章給大家詳細的介紹一下java的這三大特性。封裝封裝是將描述某類事物的數據與處理這些數據的函數封裝在一起,形成一個有機整體,稱為類。類所具有的的封裝性可使程序模塊具有良好的獨立性與可維護性。
  • Java多態性:Java什麼是多態?
    對面向對象來說,多態分為編譯時多態和運行時多態。其中編譯時多態是靜態的,主要是指方法的重載,它是根據參數列表的不同來區分不同的方法。通過編譯之後會變成兩個不同的方法,在運行時談不上多態。而運行時多態是動態的,它是通過動態綁定來實現的,也就是大家通常所說的多態性。Java 實現多態有 3 個必要條件:繼承、重寫和向上轉型。
  • 詳細介紹Java多態性(二)
    java 的這種機制遵循一個原則:當超類對象引用變量引用子類對象時,被引用對象的類型而不是引用變量的類型決定了調用誰的成員方法,但是這個被調用的方法必須是在超類中定義過的,也就是說被子類覆蓋的方法。1. 如果a是類A的一個引用,那麼,a可以指向類A的一個實例,或者說指向類A的一個子類。2.
  • 黑馬程式設計師:Python封裝、繼承和多態以及類方法等習題
    使用public關鍵字 C.使用__XX__定義屬性名 D.使用__XX定義屬性名2.下列選項中,不屬於面向對象程序設計的三個特徵的是()。繼承 D.多態3.以下C類繼承A類和B類的格式中,正確的是()。
  • 深入分析java中的多態(從jvm角度分析)
    對於java中多態概念的理解一直是面試常問的問題,所以今天花了一些時間好好地整理了一下,力求從java虛擬機的角度來分析和理解多態。一、認識多態1、方法調用在Java中,方法調用有兩類,動態方法調用與靜態方法調用。
  • Thinking In Java --- 多態(筆記)
    在面向對象的程序設計語言中,多態是繼數據抽象和繼承之後的第三種基本特徵。多態通過分離做什麼和怎麼做,從另一個角度將接口和實現分離開來。多態不但能夠改善代碼的組織結構和可讀性,還能夠創建可擴展的程序----即無論在項目最初創建時還是在需要添加新功能時都可以「生長」的程序。
  • Java程式設計師必備基礎:Java代碼是怎麼運行的?
    前言 作為一名Java程式設計師,我們需要知道Java代碼是怎麼運行的。最近複習了深入理解Java虛擬機,做了一下總結,希望對大家有幫助,如果有不正確的地方,歡迎提出,感激不盡。
  • 必學——Java抽象類、接口、多態
    (1)、接口的聲明與使用接口通過使用關鍵字interface來聲明,格式:interface 接口的名字{}(2)、一個類通過使用關鍵字implements 聲明自己實現一個或多個接口。–接口不可以被實例化–實現類必須實現接口的所有方法–實現類可以實現多個接口–接口中的變量都是靜態常量(4)、編碼實現3、多態
  • 跟我學java編程—Java類的類型轉換和動態綁定
    因此,在繼承關係中,子類的對象可以直接當作父類的對象使用,稱為「向上轉型」。注意的是,子類對象當作父類對象使用時,不能訪問其子類對象新增加的成員變量和方法。例如,在上面的例子代碼中,父類變量temp指向其子類對象,因此,不能訪問EBook類的formation和filesize屬性。既然父類變量可以指向子類對象。
  • 多態是什麼 父類如何調用子類的方法(美團面試))
    本文轉載自【微信公眾號:五角錢的程式設計師,ID:xianglin965】,經微信公眾號授權轉載,如需轉載與原文作者聯繫作者丨BossXiang 圖丨pexels這道題是來自牛客網的一位小哥在2019的最後一天面試系統開發工程師的補招的一個面試題目,在Java
  • JAVA面向對象的多態是個什麼東西?
    面向對象的三大特徵:封裝、繼承、多態。在前面已經說了過了封裝和繼承。今天就來聊聊剩下的多態。多態,從字面內容來看,就是多種形態,多種狀態。在java的面向對象中可以從以下兩個方面來講。01不同子類之間的多態在前面我們說繼承的時候說到,子類可以繼承到父類的方法,繼承後可以對方法進行重寫。
  • 黑馬程式設計師:Java學科-接口多態的綜合案例
    定義USB接口,具備最基本的開啟功能和關閉功能。滑鼠和鍵盤想要在電腦上可以使用,那麼滑鼠和鍵盤也是必須遵守USB的規範,實現USB接口,否則滑鼠和鍵盤的生產,生產出來也是無法使用的。>筆記本類,包含運行功能、關鍵功能,使用USB設備的功能滑鼠類,要實現USB接口 ,並且具備點擊的方法鍵盤類要實現USB接口,具備敲擊的方法3.案例實現定義
  • Java 中的繼承和多態(深入版)
    面向對象的三大特性:封裝、繼承、多態。在這三個特性中,如果沒有封裝和繼承,也不會有多態。那麼多態實現的途徑和必要條件是什麼呢?以及多態中的重寫和重載在JVM中的表現是怎麼樣?在Java中是如何展現繼承的特性呢?對於子類繼承於父類時,又有什麼限制呢?
  • 用經典案例來幫助初學者解析Java的「多態」
    說到Java的「多態」特性,很多人都十分熟悉、了解;也有很多人仍然在理解或闡述時對此含糊不清。我這裡還是用我13年前給我們公司新員工做內部培訓時用到的看起來似乎有點老掉牙的、但是仍然十分經典的案例來重新給有需要的java愛好者呈現一下「多態」的奧秘所在!
  • 用最傻瓜式的方法理解Java中的封裝、繼承和多態
    說到java中面向對象的封裝、繼承和多態,很多人會說這麼簡單這麼入門的東西一直講幹嘛,雖然是基礎,但是我們要明白,所有東西都是要在基礎上發展的,沒有基礎就去學其他的,那麼你肯定是很容易失敗的,那麼應該怎樣能夠用傻瓜式方法去理解Java面向對象的封裝、繼承和多態呢?
  • 「程式設計師之路」17什麼叫多態?
    面向對象三大特性:封裝、繼承和多態。今天學最後一個特性:多態。什麼叫多態呢?按照字面意思理解就是多種形態的意思。同一行為(吃東西),通過不同的事物(兔,貓,狗),可以體現出不同的形態(兔子吃胡蘿蔔,貓吃魚,狗吃肉),這就叫多態。一、多態的格式1.格式說明:父類引用指向子類對象。具體什麼意思呢?