跟我學java編程—面向對象編程多態概念的理解

2020-12-08 米粒教育

前面介紹了面向對象的繼承思想,繼承思想其核心是代碼的復用和程序功能高度的擴展性。繼承可以直接實現代碼的復用,功能的擴展性是指繼承後的類在父類的基礎上增加新的行為,或者對父類的行為進行擴展,實現同一個行為具有不同的實現代碼。

例1:在父類的基礎上增加新的行為

在『深入了解面向對象的繼承思想』一節中,給出了一個案例,案例內容及案例代碼參見『深入了解面向對象的繼承思想』一節。案例中類繼承結構如下圖所示:

圖 12-5 圖 類繼承結構圖

圖中的紙質圖書類,電子圖書類、視頻類和音頻類均繼承於Product類,被繼承的Product稱為父類,繼承的紙質圖書類,電子圖書類、視頻類和音頻類稱為子類,子類繼承父類的所有屬性和方法。現在要求EBook類除了輸出Product類的公有屬性外,還要輸出EBook類的私有屬性。從案例代碼中可以看出,EBook類的父類提供了輸出公有屬性的行為,代碼如下:

EBook類雖然可以調用父類的outProduct()方法輸出公有屬性,但無法輸出EBook類的私有屬性。這種情況下,可以在EBook類增加outEBook()方法,用於輸出EBook類的私有屬性,代碼如下:

代碼首先調用父類的outProduct()方法輸出公有屬性,然後再輸出該類的私有屬性。

例2:擴展父類的行為

例1要求EBook類除了輸出父類Product類的公有屬性外,還要求輸出EBook類的私有屬性,例1給出的解決方案是在EBook類增加outEBook()方法,該方法首先調用父類的outProduct()方法輸出父類的公有屬性,然後再輸出EBook類的私有屬性。

其實,還有一種解決方案,在EBook類中重寫父類的outProduct(),這樣當EBook對象調用outProduct()方法時,其父類的outProduct()方法被忽略,而執行EBook類的outProduct()方法。代碼如下:

例2給出的子類重寫父類的方法,就是面向對象的多態概念。在程序運行過程中,子類的行為代替了父類的行為。父類Product類有輸出屬性的方法outProduct(),而它的子類EBook類、Video類、Audio類、PaperBook類也都有這個方法。換言之,對於不同的出版物產品,都有自己輸出屬性的方法,這就構成了對象的多態概念。

多態也就是多種表現形態,前面講的方法的重載和本節中方法的重寫是Java多態性的不同表現。方法重載是一個類中多態性的表現,方法重寫是父類與子類之間多態性的一種表現。如果在一個類中定義了多個同名的方法,它們或有不同的參數個數或有不同的參數類型,則稱為方法的重載。如果在子類中定義某方法與其父類有相同的名稱和參數,就稱為方法的重寫。

■ 知識點撥

多態是面向對象編程的一大特徵,利用多態特徵編程,可以讓應用程式具有良好的擴展性。通過子類對父類方法的重寫和類方法的重載,可以在不改變原有代碼的情況下擴展程序的功能。■ 思考與練習

應用eclipse開發工具建立ProductManage項目,實現教材內容中的Product類和EBook類,並實現例1和例2的內容,Product類和EBook類的屬性可以參考『深入了解面向對象的繼承思想』一節。

相關焦點

  • 圖說Java中的OOPs(面向對象編程系統)基本概念
    面向對象編程是一種編程概念,其核心思想是允許用戶創建所需要的對象,然後提供處理這些對象的方法,使用者通過操作對象而獲得運算數據。本文將以簡潔的方式對面向對象編程中的概念進行梳理。1.Object(對象)你可以將對象理解為類的一個實例或者具體的一個個體。在Java中一個類可以有多個對象實例,但一個對象實例只能對應一個類。對象既包含數據又包含對數據進行操作的方法。例如,我們日常生活中能夠體現具體物理事物的鋼筆,電腦桌,顯示器,自行車,玻璃杯等等。3.
  • 跟我學java編程—理解Java語言的抽象與對象
    如果以面向對象的編程思想來看前面例子的話,水果可以稱之為類,而蘋果、香蕉、葡萄可以稱之為類的實例或對象。類是抽象出來的事物,現實生活中並不存在,例如水果,水果是人們賦予具有蘋果、香蕉、葡萄等共同特點的名稱,不單指某一事物;對象是指具體的實物或概念,例如蘋果、香蕉、葡萄等對象是實物,而一項政策可能就是一個概念性的對象了,在現實生活中,萬事萬物皆對象,面向對象編程就是模擬現實生活中的一個個對象來編程的。
  • 在.NET中,C#舉例深度理解面向對象編程中的封裝、繼承和多態
    -面向對象編程1.什麼是面向對象編程?我們在沒有接觸類之前,所有的代碼都是堆在一起的,沒有面向對象的概念,但接觸了類/對象/繼承/接口之後,我們要建立自己的面向對象編程的概念,在編碼過程中,要讓自己編寫的程序是面向對象的,而不是堆代碼。微軟在.NET框架中推出的C#語言是面向對象的強類型程式語言。
  • 如何給女朋友解釋什麼是面向對象編程?
    周末午後,我正在愉快的打著遊戲。女朋友拿著一本《面向對象編程》過來找我。什麼是面向對象?是要面向我寫代碼嗎?不是啦,這個面向對象的對象不是你這個對象啦。此時,我突然感受到了一股莫名的殺氣。什麼?你還有其他對象嗎?有我好看嗎?有我瘦嗎?不對。你不能有其他對象。什麼是面向對象?面向對象,英文名字叫Object Oriented,是一種軟體開發方法。是和面向過程相對應的。別給我拽英文。給我詳細說說,說不明白今天就沒完。
  • 跟我學java編程—深入理解面向對象的繼承思想
    繼承是面向對象設計的重要思想,其核心是代碼的復用和程序功能高度的擴展性。繼承在詞典中的解釋是把前人的知識、文化、思想、財產、知識等接受過來。在面向對象中,繼承是對類而言的,新類可以繼承已有類的屬性和方法,這樣做的好處是新類可以復用原有類所有的代碼,復用的同時又可以定義新的方法和屬性來擴展原有類的功能。為了理解繼承思想,下面看一個案例。某出版機構準備要通過微信小程序實現產品在微信媒體的推廣和銷售,出版機構的產品包括圖書、音頻、視頻,圖書又分為紙書和電子書。
  • Unity遊戲開發:C Sharp進階之面向對象編程
    C進階之面向對象編程深入淺出的C#進階課程在了解C#基礎語法之上,進一步學習面向對象(OOP)編程技術和.NET框架,並深入講解在實踐中總結出的OOP設計理念。學完本課程,即可設計出優質的面向對象程序,並可在Unity中用C#來開發所有腳本。
  • Java面向對象之:封裝、繼承、多態
    Java面向對象之:封裝、繼承、多態高內聚和低耦合從上述例子,不難發現:當把不同的子類對象都當作父類類型來看待,可以屏蔽不同子類對象之間的實現差異,從而寫出通用的代碼達到通用編程,以適應需求的不斷變化。
  • JAVA面向對象的多態是個什麼東西?
    面向對象的三大特徵:封裝、繼承、多態。在前面已經說了過了封裝和繼承。今天就來聊聊剩下的多態。多態,從字面內容來看,就是多種形態,多種狀態。在java的面向對象中可以從以下兩個方面來講。01不同子類之間的多態在前面我們說繼承的時候說到,子類可以繼承到父類的方法,繼承後可以對方法進行重寫。
  • 深入分析java中的多態(從jvm角度分析)
    對於java中多態概念的理解一直是面試常問的問題,所以今天花了一些時間好好地整理了一下,力求從java虛擬機的角度來分析和理解多態。一、認識多態1、方法調用在Java中,方法調用有兩類,動態方法調用與靜態方法調用。
  • 面向對象編程的災難:是時候考慮更新換代了!
    我們所做的面對對象編程都錯了我對之前為這個主題創造了「對象」這個術語感到抱歉,因為它使許多人把注意力集中在較次要的概念上。事實上,最重要的是傳遞信息。命令式編程(包括面向對象編程)根據程序狀態和對該狀態的改變來描述計算。聲明式(函數式)編程描述的是期望的結果,而不是明確指定對狀態的改變。可變狀態——精神雜耍行為大型面向對象編程在構建這個可變對象的大型對象圖時,會變得越來越複雜。嘗試理解記住——當你調用一個方法時會發生什麼以及副作用是什麼。
  • Java面向對象之接口——interface
    對於同一種型號的主板上的多個USB插槽,他們有相同的數據交換方式,相同的實現細節;在面向對象的思想中,可認為他們都是同一個類的不同實例,也就是說插槽是USB規範的實例。如: Walkable.java以I開頭表示接口,如:IWalkable.java接口在編譯成功之後,和類一樣,也是.class的字節碼文件。
  • 面向對象編程
    面向對象編程(OOP)對於初學者來說可能是一個很難理解的概念。很多書籍都是從解釋OOP開始,討論三大術語:封裝、繼承和多態性,但是解釋的效果往往讓人失望。本文希望讓程式設計師、數據科學家和python愛好者們更容易理解這個概念。我們去掉所有的行話,通過一些例子來做解說。這篇文章是關於解釋OOP的外行方式。
  • 用最傻瓜式的方法理解Java中的封裝、繼承和多態
    說到java中面向對象的封裝、繼承和多態,很多人會說這麼簡單這麼入門的東西一直講幹嘛,雖然是基礎,但是我們要明白,所有東西都是要在基礎上發展的,沒有基礎就去學其他的,那麼你肯定是很容易失敗的,那麼應該怎樣能夠用傻瓜式方法去理解Java面向對象的封裝、繼承和多態呢?
  • 開發崗位這麼多,為什麼選Java?你學Java了嗎-開課吧
    其他程式語言與Java相比,Java語法相對簡單,並且是很多計算機語言的基礎。提到C++語言,很多人發現在使用過程中最容易出現的錯誤就是內存管理,而java有自動垃圾回收器,不用擔心內存。零基礎學Java作為一門面向對象的高級語言,Java不僅吸收了C++語言的各種優點,還對C++裡諸如多繼承、指針等一些讓用戶難以理解和掌握的概念重新組織和及摒棄
  • Java多態,對象轉型,和簡單工廠模式 希望對您有幫助!
    各位讀者老爺們大家好鴨~圖圖又來了,今天我們要說一下「多態」。怎麼理解這兩個字呢?可以理解為同一個引用對象的不同表現形態,即將父類的引用指向子類的對象。這是比較官方的書面解釋,大家可以通過自己的理解轉化成自己的話。知道,了解一下就行。大家還需要知道的是:多態是java面向對象的三大特徵之一。
  • 適合Java新手的開源項目集合——在 GitHub 學編程
    在歷史的長河中誕生過無數的著作,計算機領域也不例外,而《Think in Java》就是我要重點介紹的一本著作,這本書給我的第一印象就是:全!從最基本的數據類型到之後的面向對象再到後面的泛型反射的高級話題,無所不包。我之前閱讀的是第四版實體書,現在的好消息是,第五版來了!而且是以開源的形式。
  • 跟我學java編程—Java邏輯運算符
    示例1:邏輯運算符在D盤Java目錄下,新建「LogicSample.java」文件。用記事本打開「LogicSample.java」文件,輸入以下代碼:代碼結構分析程序功能主要是演示邏輯運算符的用法。類似語句「bJudge = !
  • 跟我學java編程—Java類的類型轉換和動態綁定
    因此,在繼承關係中,子類的對象可以直接當作父類的對象使用,稱為「向上轉型」。注意的是,子類對象當作父類對象使用時,不能訪問其子類對象新增加的成員變量和方法。例如,在上面的例子代碼中,父類變量temp指向其子類對象,因此,不能訪問EBook類的formation和filesize屬性。既然父類變量可以指向子類對象。
  • 詳細介紹Java多態性(一)
    通過將子類對象引用賦值給超類對象引用變量來實現動態方法調用。下面介紹java的多態性。面向對象編程有三個特徵,即封裝、繼承和多態。封裝隱藏了類的內部實現機制,從而可以在不影響使用者的前提下改變類的內部結構,同時保護了數據。繼承是為了重用父類代碼,同時為實現多態性作準備。那麼什麼是多態呢?
  • 程式設計師編程入門必知!程式設計師需要學什麼
    學習語言的過程中還要有機會進行檢驗,不能只編寫代碼,還要檢驗代碼的結果運行是否正確,也就是某些可以運行結果的軟體我們要有,不過許多的程式語言都要求有被程式設計師設計來講代碼轉換成機器能理解的語言的編譯器。其他一些語言,比如Python,使用可以立即轉換成程序而不需要編譯。一些語言有自己的往往包含著代碼編輯器、調試器和/或者翻譯以及調試的IDEs(集成開發環境)。