1. 程式人生 > >面向對象基本特征

面向對象基本特征

必須 類型 不知道 不可 計算 系統封裝 子類 ext 私有化

封裝

1、把對象的屬性、行為封裝起來,其載體是類。
    屬性封裝:private 私有化
    行為封裝:方法,封裝的是一個獨立的功能,一段代碼。
    對於調用者來說,隱藏了實現細節;暴露一些方法的簽名供開發者調用。
2、廣義的封裝
    組件封裝:對方給你開放了接口,你按照它規定的格式,把數據傳給它,它計算完,並把結果返回。
    例如:第三方組件、支付寶、網銀支付。。。。
  系統封裝:對使用者來說,不知道實現細節,但是知道怎麽用。

標準的javaBean
    (1)屬性私有化
    (2)提供get/set方法
    (3)保留無參構造

繼承(延續:相同點、擴展:特有點)

為什麽有繼承?

1、為了代碼復用和功能擴展

如何實現繼承?

 [修飾符] 子類名 extends 父類名{}  

繼承的特點?

    1、java只支持單繼承。
    2、java支持多層繼承。
    3、父類可以有多個子類。
    4、子類會繼承父類所有的屬性和方法,但是如果修飾符為private,雖然繼承過來了,但是不可見。
    5、子類不會繼承父類的構造器。
    6、子類的構造器一定會調用父類的構造器。並且默認調用父類的無參構造器。當父類沒有無參構造器時,需要在子類中,手動調用父類的構造器:super(實參列表);

    為什麽調用父類的構造器??

重寫(override)

    定義:在子類中重寫繼承自父類的方法,方法名和參數列表相同,方法實現不同
  • 特點
    • 方法名:完全相同
    • 形參列表:完全相同
    • 返回值類型
      • void或者基本數據類型時:完全相同
      • 引用數據類型時:返回父方法類型,或者父方法返回類型的子類。
    • 修飾符
      • 權限修飾符
        • 重寫方法的修飾符 >= 被重寫方法的修飾符
        • 註意:父類方法不能是private,子類中不可見
      • 其他
    • 拋出的異常列表

多態

為了代碼更靈活
實現多態的前提是繼承。
多態:就是父類引用指向子類對象。(編譯看左,運行看右)

解惑?

    1、Overload與Override的區別
    Overload:重載  load的英文意思是載入,裝載
    Override:重寫 

    Overload概念:表示在同一個類中,出現了方法名相同,形參列表不同的兩個或多個方法,稱為方法的重載。註意與返回值無關。
    Override:當子類繼承父類時,會繼承父類中的所有方法,但是父類的某個方法的實現不適用於子類,那麽子類就重寫該方法。
    重寫要求:
        方法名:必須完全相同
        形參列表:必須完全相同
        返回值類型:1、如果是void、基本數據類型,則要求返回類型完全一樣
        2、如果父類方法返回類型時引用類型,則子類方法返回類型<父類方法返回類型。

    2、java為何設計單繼承?而不是多繼承呢?接口為什麽能多實現呢?
        ①從技術角度講,降低復雜性。
        類A有一個m()方法,類B有一個m()方法,而類C繼承A,B;此時會發生問題,就是不確定繼承哪一個m()方法。至於接口為啥是多實現呢?難道接口中的變量(屬性都是 static final修飾的,即常量)可以區分?在編譯器,常量值不同時不能通過編譯。所以屬性肯定一樣的。至於方法,接口中的方法都是抽象方法,需要實現該接口的類去實現方法,最終調用的是子類的方法;而繼承則不一樣,父類的方法也是可以調用的,例如super.m(),你就不能確定調用A?還是B類中的方法了。

面向對象基本特征