繼承、接口與多態的相關問題

2021-03-02 java一日一條

1、 繼承的作用?好處?壞處?

繼承:通過繼承實現代碼復用。Java中所有的類都是通過直接或間接地繼程java.lang.Object類得到的。繼承而得到的類稱為子類,被繼承的類稱為父類。子類不能繼承父類中訪問權限為private的成員變量和方法。子類可以重寫父類的方法,及命名與父類同名的成員變量。但Java不支持多重繼承,即一個類從多個超類派生的能力。

優點:a因為大部分是繼承而來的,實現代碼重用,減少代碼書寫量;

b很容易修改和擴展已有的實現

缺點:a打破了封裝,因為基類向子類暴露了實現細節

b白盒重用,因為基類的內部細節通常對子類是可見的

c當父類的實現改變時可能要相應的對子類做出改變

d不能在運行時改變由父類繼承來的實現

2、 接口的好處?壞處?

優點:幫助Java語言實現一個類似於多繼承的功能.但是實現的多繼承功能不會使代碼中的類之間出現網狀關係,而是比較清楚的樹狀關係,類似於家譜的感覺。

缺點:如果向一個java接口加入一個新的方法時,所有實現這個接口的類都得編寫具體的實現。

3、 多態的作用?好處?壞處?

作用:簡單的說就是一個接口,多種實現;繼承的表現就是多態(沒有繼承就沒有多態。)

a應用程式不必為每一個派生類編寫功能調用,只需要對抽象基類進行處理即可。大大提高程序的可復用性。

b派生類的功能可以被基類的方法或引用變量所調用,這叫向後兼容,可以提高可擴充性和可維護性。

優點:a可替換性(可以替換一存在的代碼);

b可擴充性(增加新的子類不影響原有類的特性);

c接口性;

d靈活性;

e簡化性

缺點:a「遮蓋」私有方法。只有非private的方法才能夠被籠罩,儘管編譯器不會報錯,然而也不會遵照我們所渴望的來實行。在導出類中,對於基類中的private方法,優秀採納不同的名字。

b域在轉型時候的問題。對於成員變量(域),導出類將佔有從基類承襲而來的成員變量和自己的成員變量(變量名字相一同也是如此),況且,將分攤不同的存儲空間,這麼,導出類將具有兩個名目一樣的域。為了取得基類的域,務須實際地著名super.field能力走訪,而默許的域則是導出類自己的域。

c靜態計策是與類相關係的,而非與某個對象相干聯的,那麼它就不擁有多態行動。

4、 什麼是重載?什麼是重寫?

重載:

a方法重載是讓類以統一的方式處理不同類型數據的一種手段。多個同名函數同時存在,具有不同的參數個數/類型。重載Overloading是一個類中多態性的一種表現。

b Java的方法重載,就是在類中可以創建多個方法,它們具有相同的名字,但具有不同的參數和不同的定義。調用方法時通過傳遞給它們的不同參數個數和參數類型來決定具體使用哪個方法, 這就是多態性。

c重載的時候,方法名要一樣,但是參數類型和個數不一樣,返回值類型可以相同也可以不相同。無法以返回型別作為重載函數的區分標準。

重寫:

a父類與子類之間的多態性,對父類的函數進行重新定義。如果在子類中定義某方法與其父類有相同的名稱和參數,我們說該方法被重寫 (Overriding)。在Java中,子類可繼承父類中的方法,而不需要重新編寫相同的方法。但有時子類並不想原封不動地繼承父類的方法,而是想作一定的修改,這就需要採用方法的重寫。方法重寫又稱方法覆蓋。

b若子類中的方法與父類中的某一方法具有相同的方法名、返回類型和參數表,則新方法將覆蓋原有的方法。如需父類中原有的方法,可使用super關鍵字,該關鍵字引用了當前類的父類。

c子類函數的訪問修飾權限不能少於父類的;

5、 什麼是組合?

組合: a通過創建一個由其他對象組合的對象來獲得新功能的重用方法

b新功能的獲得是通過調用組合對象的功能實現的

c有時又叫聚合

優點:a被包含對象通過包含他們的類來訪問

b黑盒重用,因為被包含對象的內部細節是不可見的

c很好的封裝

d每個類專注於一個任務

e通過獲得和被包含對象的類型相同的對象引用,可以在運行時動態定義組合的方式

缺點:a結果系統可能會包含更多的對象

b為了使組合時可以使用不同的對象,必須小心的定義接口

推薦微信公眾號:菜鳥要飛(←長按複製)

【菜鳥要飛】專注於分享最全的編程開發視頻學習資料。目前已整理的視頻有c/c++,遊戲開發,Android,ios,windowsphone8,javaweb,asp.net,php,黑客技術,Hadoop,javascript等


相關焦點

  • 淺析java繼承與多態,抽象類與接口的區別
    而面向對象的基本特性就是封裝、繼承、與多態。一、繼承extends 關鍵字表示繼承某個已存在的類,已存在的類稱為「超類」、「基類」、或「父類」,而新繼承的類稱為「子類」、「派生類」。子類可以方法父類中的所有非 private 域,也即子類通過繼承獲得了父類具有的特性和能力。
  • Java中使用接口實現多繼承和多態的方法
    1.JAVA裡沒有多繼承,一個類之能有一個父類。  而繼承的表現就是多態。一個父類可以有多個子類,而在子類裡可以重寫父類的方法(例如方法print()),這樣每個子類裡重寫的代碼不一樣,自然表現形式就不一樣。
  • C中的繼承和多態
    有了繼承和多態,我們可以完成代碼重用。在C中有許多技巧可以實現多態。本文的目的就是演示一種簡單和容易的技術,在C中應用繼承和多態。通過創建一個VTable(virtual table)和在基類和派生類對象之間提供正確的訪問,我們能在C中實現繼承和多態。VTable能通過維護一張函數表指針表來實現。為了提供基類和派生類對象之間的訪問,我們可以在基類中維護派生類的引用和在派生類中維護基類的引用。
  • Java 中的繼承和多態(深入版)
    在這三個特性中,如果沒有封裝和繼承,也不會有多態。那麼多態實現的途徑和必要條件是什麼呢?以及多態中的重寫和重載在JVM中的表現是怎麼樣?在Java中是如何展現繼承的特性呢?對於子類繼承於父類時,又有什麼限制呢?本文系基礎,深入淺出過一遍 Java 中的多態和繼承。多態是同一個行為具有多個不同表現形式或形態的能力。
  • 淺析 Python 的類、繼承和多態
    繼承舉一個教科書中最常見的例子。Circle 和 Rectangle 繼承自 Shape,不同的圖形,面積(area)計算方式不同。多態如前所述,Python 沒有覆寫(override)的概念。嚴格來講,Python 並不支持「多態」。為了解決繼承結構中接口和實現的問題,或者說為了更好的用 Python 面向接口編程(設計模式所提倡的),我們需要人為的設一些規範。請考慮 Shape.area() 除了簡單的返回 0.0,有沒有更好的實現?
  • c++是如何實現多繼承帶來的多態問題?
    多態是指同樣的消息被不同類型的對象接收時導致完全不同的的行為。有虛函數的類才能叫多態類型的類,可以從探索虛函數是如何實現動態綁定的來了解如何實現多繼承中的多態。單繼承時虛函數動態綁定的實現原理每個類各有一個虛表(虛函數表),虛表的內容是由編譯器安排的。
  • C sharp編程基礎實現多態的方法之三:接口實例解析
    接口裡面的方法,屬性不能用public,private等修飾,接口裡面的方法不實現,只聲明,真正的實現是在繼承的子類中實現。接口裡面只能放屬性,方法,不能放欄位,接口可以以更靈活的方式實現多態。顯示實現接口的目的:解決方法的重名問題。2、顯示實現接口示例代碼:聲明的接口IFlyable中有Fly()方法,子類Bird中也有Fly()方法,但子類Bird實現了接口IFlyable。
  • 繼承和面向接口(iOS架構思想篇)
    如:Masonry (面向接口解決問題)在接下來的分析中,這些問題都會一一得到解答,保證乾貨滿滿。筆者原本想著圍繞繼承和面向接口各寫一片文章,但實際繼承和面向接口在某些方面還有很多的關聯性,因此這裡索性合二為一。
  • 軟體特攻隊|針對C++編譯期多態與運行期多態,我有話說
    在C++的面向對象編程中,多態是OO三大特性之一,我們稱為運行期多態,也稱它為動態多態;但在泛型編程中,多態是基於模板的具現化與函數的重載解析,由於這種多態發生於編譯期,所以稱它為編譯期多態或靜態多態。運行期多態運行期多態的設計來源於類繼承體系的設計上。
  • C語言實現繼承和多態
    背景 寫這篇文章的是因為前幾天看了一個火狐的郵箱代碼,純C寫的,很佩服他們能用C寫出多態、繼承的形式來
  • Java多態的實現機制是什麼,寫得非常好!
    下面簡要介紹一下運行時多態(以下簡稱多態)的機制。多態通常有兩種實現方法:子類繼承父類(extends)類實現接口(implements)無論是哪種方法,其核心之處就在於對父類方法的改寫或對接口方法的實現,以取得在運行時不同的執行效果。
  • 電腦程式的思維邏輯 (15) - 初識繼承和多態
    使用繼承一方面可以復用代碼,公共的屬性和行為可以放到父類中,而子類只需要關注子類特有的就可以了,另一方面,不同子類的對象可以更為方便的被統一處理。本節主要通過圖形處理中的一些簡單例子來介紹Java中的繼承,會介紹繼承的基本概念,關於繼承更深入的討論和實現原理,我們在後續章節介紹。
  • 面向對象特性之三:多態(Python進階教程)
    今天我們還是用例子來說明在Python中多態的使用方法、注意事項和使用的優點。這兩個類是「部門類」的子類,下面我們用代碼來表示一下這三個類:在上例中,我們定義了三個類,主類叫做「部門類」,兩個子類繼承於該類,分別代表「海運部門」和「空運部門」,這兩個類除了都有自己的構造函數之外,還有著一個具有相同名稱的方法,我們暫且叫做「送貨」方法。
  • Java中的多態有哪些具體表現形式
    學習Java語言的過程中,對於多態的理解是非常關鍵的,理解了多態也就意味著打開了理解Java各種「抽象」的大門。所謂的「多態」,簡單的理解就是對象在不同情況下的不同表現,具體體現在定義和功能兩個方面,簡單的總結一下,多態可以用「三個定義和兩個方法」來總結。三個定義分別是父類定義子類構建、接口定義實現類構建和抽象類定義實體類構建,而兩個方法分別是方法重載和方法重寫。
  • java多態
    多態在設計一個方法時,通常希望該方法具備一定的通用性。例如要實現一個動物叫的方法,由於每種動物的叫聲是不同的,因此可以在方法中接收一個動物類型的參數,當傳入貓類對象時就發出貓類的叫聲,傳入犬類對象時就發出犬類的叫聲。在同一個方法中,這種由於參數類型不同而導致執行效果各異的現象就是多態。繼承是多態得以實現的基礎。
  • python中類的繼承和多態
    繼承是為了代碼復用和設計復用而設計的,是面向對象程序設計的重要特徵之一。當我們設計一個新類時,如果可以繼承一個已有的設計良好的類然後進行二次開發,無疑會大幅度減少開發工作量。1.類的繼承類繼承語法:Class 派生類名(基類名): #基類名寫在括號裡派生類成員在繼承關係中,已有的,設計好的類稱為父類或基類,新設計的類稱為子類或派生類。派生類可以繼承父類的公有成員,但是不能繼承其私有成員。
  • C語言中的面向對象(1)-類模擬和多態,繼承
    正在閱讀:C語言中的面向對象(1)-類模擬和多態,繼承C語言中的面向對象(1)-類模擬和多態,繼承2005-01-12 10:04出處:作者:liyuming1978
  • Java基礎知識學習:Java三大特效之多態!
    1.1 多態的形式多態是繼封裝、繼承之後,面向對象的第三大特性。多態是出現在繼承或者實現關係中的。多態體現的格式:父類類型 變量名 = new 子類/實現類構造器;變量名.方法名();多態的前提:有繼承關係,子類對象是可以賦值給父類類型的變量。例如Animal是一個動物類型,而Cat是一個貓類型。
  • Java基礎入門之多態和對象類型轉換
    Java」即可獲贈Java學習資料    前面幾篇文章用Java帶大家一起了解Java的部分基礎知識,感興趣的小夥伴們可以去學習下了,一篇文章帶你了解Java類的設計和封裝及類成員的訪問控制、一篇文章帶你了解this關鍵字和單例模式、Java基礎入門篇——面向對象和類的定義,這篇文章帶大家一起學習下Java知識中的接口及其繼承知識
  • 第79p,什麼是多態,多態有什麼特點?
    大家好,我是楊數Tos,這是《從零基礎到大神》系列課程的第79篇文章,第三階段的課程:Python進階知識:類與對象(十);面向對象編程3大特性之多態。一、什麼是多態?多態指的是同一種事物有多種形態;比如:水和冰都是水,人既是人也是動物;多態帶來的特性是可以在不考慮對象具體類型的情況下使用對象;比如:只要是人就一定會說話、吃飯、呼吸,而不用考慮他是老人還是小孩子;多態性帶來的好處在於減少使用者的學習成本;比如:我們考駕駛的時候只需要考汽車駕照就可以了