面向對象

面向對象

步驟和功能在進行封裝,封裝時根據不一樣的功能,進行不一樣的封裝,功能相似的封裝在一塊兒。。用的時候,找到對應的類就能夠了。這就是面向對象的思想。安全

在Java文件中寫兩個類:一個基本的類,一個測試類。文件名稱和測試類名稱一致。基本類建立類,在測試類中new一個對象(類名 對象名 = new 類名();)。這時使用成員變量就能夠直接打點調用(對象名.變量名),一樣成員方法就能夠:對象名.方法名(...)調用。ide

成員變量和局部變量的區別

  1. 成員變量:在類中方法外;儲存在堆內存;隨着對象的建立而存在,隨着對象的消失而消失;有默認初始化值。
  2. 局部變量:在方法定義中或者方法聲明上;儲存在棧內存;隨着方法的調用而存在,隨着方法的調用完畢而消失;沒有默認初始化值,必須定義,賦值,而後才能使用。
  3. 局部變量名稱能夠和成員變量名稱同樣,在方法中使用的時候,採用的是就近原則。

面向對象的三大特徵

封裝(encapsulation)

是指隱藏對象的屬性和實現細節,僅對外提供公共訪問方式。測試

封裝的原則

  1. 將不須要對外提供的內容都隱藏起來。
  2. 把屬性隱藏,提供公共方法對其訪問。

封裝的好處

  1. 隱藏實現細節,提供公共的訪問方式
  2. 提升了代碼的複用性
  3. 提升安全性。

關鍵字private

  1. private是一個權限修飾符,能夠修飾變量和成員方法,被private修飾的成員只能在本類中被訪問。
  2. private修飾後應該提供對應的get()和set()方法,傳入數據和返回數據。

關鍵字this

當咱們的局部變量和成員變量相同的時候,就會致使局部變量隱藏了成員變量。this能夠解決這個問題。this

this的特色

  1. 是當前類的對象引用。它就表明當前類的一個對象。
  2. 誰調用這個方法,那麼該方法的內部的this就表明誰。

繼承(inheritance)

子類對象is a父類中的對象設計

繼承的概念

  1. 繼承:將多個子類的共性向上抽取到父類,來實現代碼的複用性和維護性。
  2. Java中能夠經過extends修飾子類,使子類能夠繼承父類的非私有成員。
  3. 繼承的格式:class 子類名 extends 父類名 {} 。

繼承的注意事項

繼承的弊端

繼承增長了代碼的耦合性(一個類要完成某項功能要依靠另外的某些類叫耦合),軟件設計原則是:高內聚(一個類單獨完成某項功能的能力),低耦合。繼承使類和類之間更依賴。對象

繼承注意事項

  1. Java中只支持單繼承,可是支持多層繼承。
  2. object是全部類的頂層父類,全部類都直接或間接繼承它。
  3. 父類私有化的成員子類沒法繼承。
  4. 構造方法不參與繼承。若是父類有構造,由於子類繼承父類的時候要繼承或使用父類的數據,因此在子類初始化前讓父類的構造先執行。建立子類對象的時候先執行父類的構造再執行子類的構造。
  5. 子類不繼承父類的構造方法,可是能夠用super關鍵字訪問父類的構造方法。

繼承中變量訪問原則

就近原則訪問,先在局部中找,找不到再到本類中找,找不到再去父類找。繼承

關鍵字super

  1. super是父類的一個引用,可使用super訪問父類的數據(成員變量、成員方法、構造方法)。
  2. 在每一個類構造方法的第一行都會有一條默認語句super(),默認調用父類的空參構造來完成父類構造方法的初始化。若是父類不提供空參構造,那子類就傳參去父類調用父類的有參構造。
  3. super和this不能共存。this表明本類的一個引用,理解爲本類的一個對象,那個對象調用方法this就表明誰。

方法重寫

  1. 子類中出現了和父類中如出一轍的方法聲明(方法名,參數列表,返回值類型),就會發生方法重寫,子類的方法覆蓋父類的方法。
  2. 當子類對父類的方法不滿意時,想對父類的方法進行擴展,就能夠採用方法重寫
  3. 用@override(註解)能夠檢測此方法是不是重寫父類的。
  4. 靜態方法不屬於對象,屬於類,用類名調用,因此靜態方法不算重寫。

方法重寫的注意事項

  1. 因父類私有的方法子類沒法繼承,因此子類不能重寫父類私有的方法。
  2. 子類在重寫父類的方法時,權限修飾符不能比父類的低,最好同樣。
  3. 靜態方法不參與重寫。
  4. final修飾的方法不能重寫。

方法重載

容許一個類中,出現多個同名方法,只要參數個數或參類型不一樣便可。接口

關鍵字final

因爲繼承中有一個方法重寫的現象,而有時候咱們不想讓子類去重寫父類的方法.這對這種狀況Java就給咱們提供了一個關鍵字: final(最終的)。final能夠修飾變量、類、成員方法內存

  1. final修飾變量時此變量變常量。
  2. final修飾類時,類不能被繼承。
  3. final修飾方法時方法不能被重寫,子類只能原封不動繼承。
  4. final修飾基本數據類型,數據的值不能被改變。final修飾引用數據類型,地址值不能被改變。

多態(polymorphism)

面向對象的三大特徵最後一個
繼承是多態的前提get

多態的概念

  1. 多態就是某個事物在某個時刻表現出來的不一樣狀態。
  2. 多態的三個必要條件:1. 要有繼承。2.要有方法重寫,沒有就沒意義。3.父類引用指向子類對象。

多態的注意事項

多態的好處

  1. 提升代碼的複用性和維護性。(繼承的特色)
  2. 提升了代碼的擴展性。

多態中成員訪問的特色

  1. 以多態形式訪問成員變量,使用的是父類單的變量。編譯運行看左邊。
  2. 多態的形式訪問成員方法,編譯看左邊運行看右邊。
  3. 建立子類對象的時候,會訪問父類的構造方法,對父類的數據進行初始化。

多態的弊端

  1. 不能訪問子類獨有的功能和屬性。要想使用,必須向下轉型:把父類的引用強制轉換爲子類的引用。
    向下轉型有可能出現類型轉換異常,注意new一個空間才能轉。

抽象類

  1. 抽象類就是Java中沒有方法體的方法。類中若是有抽象方法,該類就定義爲抽象類。
  2. 抽象類和抽象方法必須有關鍵字abstract(抽象的)修飾。
  3. 抽象類的格式爲:abstract class 類名 {}
    抽象方法的格式爲:public abstract void eat();
  4. 抽象類能夠沒有抽象方法,有抽象方法的必定是抽象類。
  5. 抽象類中能夠有構造方法,是爲了子類訪問父類數據時初始化父類的。
  6. 若是想讓抽象類實例化,就要以多態的方式由具體的子類實例化。
  7. 抽象類的子類必須是抽象類,或者重寫全部方法的子類。

    抽象類的成員特色

  8. 抽象類的成員變量既能夠是變量,也能夠是常量。
  9. 抽象類有用於子類訪問父類數據初始化用的構造方法。
  10. 抽象類的成員方法既能夠是抽象的,也能夠是非抽象的。
  11. 關鍵字abstract不能和private、final、static關鍵字共存。
  12. 若是一個抽象類沒有抽象方法,那就不能建立對象。

    接口

    對象與生俱來的功能定義在類中很合理,可是局部對象的特性定義在類中就不合理了。不是天生具有的就不合適。若是有擴展功能,就要用接口來定義擴展功能。

接口的概念

  1. 接口:用來定義一些擴展功能,那些事物未來要用接個功能,就能夠實現這個藉口而後作出具體實現。
  2. 接口就是用來定義規範和規則的。
  3. 用關鍵字interface來定義接口。將class改爲interface。格式: interface 接口名 {}。類實現接口用implements表示,格式:class 類名 implements 接口名{}。
  4. 接口中的功能沒有具體實現。接口不能實例化,不能new對象。

    接口的特色

  5. 接口中成員變量的特色:全是靜態的公共變量。沒有變量一說。接口中成員變量前面有默認的修飾符。
  6. 接口中沒有構造方法,不能new對象。
  7. 接口中的方法全是抽象方法,內有非抽象方法。方法前存在默認修飾符。

接口和接口。類和類的關係

    1. 類和類的關係:單繼承,支持多層繼承。
  1. 類和接口的關係:實現關係,既能夠單實現,也能夠多實現。實現接口必須重寫接口中全部方法。
  2. 接口和接口的關係:繼承關係,而且能夠多繼承。單繼承一個類的同時能夠多繼承多個接口。

抽象類和接口的區別

  1. 設計思想:抽取全部子類的共性,並強制子類對共性功能重寫。接口定義的是整個繼承體系當中的一些額外擴展功能,那些類想要具有擴展功能就能夠具體實現某個接口。
  2. 抽象類中有構造方法,接口中沒有。
  3. 抽象類中中既能夠有抽象方法也能夠由非抽象方法。接口中全是靜態的公共變量。

jdk1.8以後,接口中能夠定義一個默認方法,能夠有方法的具體實現,必須用default修飾。子類實現後就能夠用有具體體現的默認方法。可能爲了彌補 類的單繼承 的不足(子類能夠繼承多個接口)。

相關文章
相關標籤/搜索