多態(tài)(polymorphism)、接口(interface)和抽象類(lèi)(abstract)

多態(tài):參數(shù)不同,相同的類(lèi)執(zhí)行的功能不同。多態(tài)是一項(xiàng)讓程序員將改變的事物與未改變的事物分離開(kāi)來(lái)的重要特征。只有普通的方法調(diào)用可以是多態(tài)的,構(gòu)造器并不具有多態(tài)性(它實(shí)際上是static方法,只不過(guò)該static聲明是隱式的)。只有非private方法才可以被覆蓋(在導(dǎo)出類(lèi)中,對(duì)于基類(lèi)中的private方法最好采用不同名字)。

將一個(gè)方法調(diào)用同一個(gè)方法主體關(guān)聯(lián)起來(lái)被稱(chēng)為綁定,java中除了static方法和final方法(private屬于final方法)之外,其他所有的方法都是后期綁定(后期綁定;在運(yùn)行時(shí)根據(jù)對(duì)象的類(lèi)型進(jìn)行綁定)

復(fù)雜對(duì)象調(diào)用構(gòu)造器的順序:

  1. 調(diào)用基類(lèi)構(gòu)造器
  2. 按聲明順序調(diào)用成員的初始化方法
  3. 調(diào)用導(dǎo)出類(lèi)構(gòu)造器的主題

必須令所有構(gòu)造器都得到調(diào)用,否則就不可能正確構(gòu)造完整對(duì)象。銷(xiāo)毀的順序應(yīng)該和初始化順序相反,對(duì)于字段則意味著與聲明順序相反。

  • 向上轉(zhuǎn)型會(huì)丟失具體的類(lèi)型信息
  • 接口和內(nèi)部類(lèi)為我們提供了一種將接口與現(xiàn)實(shí)分離的更加結(jié)構(gòu)化的方法
  • 抽象類(lèi)介于普通類(lèi)與接口之間(包含抽象方法的類(lèi)叫做抽象類(lèi))

抽象類(lèi)(abstract)和接口(interface)的區(qū)別

  • 接口:只提供形式,而未提供任何實(shí)現(xiàn)。接口包含的域必須是隱式的static和final的,當(dāng)要實(shí)現(xiàn)一個(gè)接口時(shí),在接口中被定義的方法必須被定義為public。接口可以實(shí)現(xiàn)解耦合。使用接口可以達(dá)到向上轉(zhuǎn)型為多個(gè)基類(lèi)型的目的,與使用抽象基類(lèi)相同,防止客戶端程序員創(chuàng)建該類(lèi)的對(duì)象,并確保這僅僅是建立一個(gè)接口。子類(lèi)使用關(guān)鍵字implements來(lái)實(shí)現(xiàn)接口。它需要提供接口中所有聲明的方法的實(shí)現(xiàn)。接口可以繼承一個(gè)或多個(gè)接口。
  • 抽象類(lèi):它可以有默認(rèn)的方法實(shí)現(xiàn)。其實(shí)現(xiàn)需要子類(lèi)使用extends關(guān)鍵字來(lái)繼承抽象類(lèi)。如果子類(lèi)不是抽象類(lèi)的話,它需要提供抽象類(lèi)中所聲明的抽象方法的實(shí)現(xiàn)。抽象類(lèi)可以有構(gòu)造器。抽象類(lèi)的速度比接口要快。

使用場(chǎng)景

  1. 如果擁有一些方法并且想讓它們中的一些有默認(rèn)實(shí)現(xiàn),就使用抽象類(lèi)
  2. 要實(shí)現(xiàn)多重繼承,就必須使用接口
  3. 要是基本功能在不斷改變,那么就需要使用抽象類(lèi)

內(nèi)部類(lèi)(InnerClass)相關(guān)

  • 想從外部類(lèi)的非靜態(tài)方法之外的任意位置創(chuàng)建某個(gè)內(nèi)部類(lèi)的對(duì)象,那么必須像在main()方法中那樣具體地指明這個(gè)對(duì)象的類(lèi)型,即:OutClassName.InnerClassName[典型情況:外部類(lèi)有一個(gè)方法,該方法返回一個(gè)指向內(nèi)部類(lèi)的引用]。內(nèi)部類(lèi)的對(duì)象能訪問(wèn)其外圍對(duì)象的所有成員,而不需要任何特殊條件。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語(yǔ)法,類(lèi)相關(guān)的語(yǔ)法,內(nèi)部類(lèi)的語(yǔ)法,繼承相關(guān)的語(yǔ)法,異常的語(yǔ)法,線程的語(yǔ)...
    子非魚(yú)_t_閱讀 34,896評(píng)論 18 399
  • 一、繼承和多態(tài)在面向?qū)ο缶幊讨?,繼承(也稱(chēng)為派生)讓您能夠創(chuàng)建新類(lèi),而這些類(lèi)繼承了父類(lèi)(也稱(chēng)為基類(lèi))的特征和行為。...
    CarlDonitz閱讀 933評(píng)論 0 2
  • 1.import static是Java 5增加的功能,就是將Import類(lèi)中的靜態(tài)方法,可以作為本類(lèi)的靜態(tài)方法來(lái)...
    XLsn0w閱讀 1,443評(píng)論 0 2
  • 面向?qū)ο笾饕槍?duì)面向過(guò)程。 面向過(guò)程的基本單元是函數(shù)。 什么是對(duì)象:EVERYTHING IS OBJECT(萬(wàn)物...
    sinpi閱讀 1,228評(píng)論 0 4
  • 很多時(shí)候在想,痛苦究竟要怎樣定義才算。很久沒(méi)感知過(guò)痛苦,最近卻愈加深刻,無(wú)法紓解。越來(lái)越深刻的追憶大學(xué)生活,有一段...
    莉莉非利亞閱讀 173評(píng)論 1 0

友情鏈接更多精彩內(nèi)容