萬物皆爲對象(根類Object類)。程序員
程序是對象的集合(面向對象程序設計語言OOP)。編程
每一個對象都有本身的由其餘對象所構成的存儲(對象有成員屬性)。安全
每一個對象都擁有其類型(每一個對象都是某個類class的一個實例instance)。spa
某一特定類型的全部對象均可以接收一樣的信息(繼承)。設計
類描述具備相同特性(數據元素)和行爲(功能)的對象集合。是面向對象設計除了基本數據類型外的,一種通用的數據類型。對象
提升對象的內聚性,將對象的設計簡化,並凸顯其提升的服務價值。繼承
高質量代碼的基本要求是:可複用、高內聚、低耦合。接口
指利用抽象數據類型將數據和基於數據的操做封裝在一塊兒,使其構成一個不可分割的獨立實體,數據被保護在抽象數據類型的內部,儘量地隱藏內部的細節,只保留一些對外接口使之與外部發生聯繫。系統的其餘部分只有經過包裹在數據外面的被受權的操做來與這個抽象數據類型交流與交互。用戶無需知道對象內部方法的實現細節,但能夠根據對象提供的外部接口(對象名和參數)訪問該對象。開發
一句話總結:it
所謂封裝,就是把數據和方法保護在類的內部,只容許可信的類或對象操做,對不可信的進行信息隱藏。
好處:
(1)實現了專業的分工。
將能實現某一特定功能的代碼封裝成一個獨立的實體後,各程序員能夠在須要的時候調用,從而實現了專業的分工。
(2)隱藏信息,實現細節。
經過控制訪問權限能夠將能夠將不想讓客戶端程序員看到的信息隱藏起來,如某客戶的銀行的密碼須要保密,只能對該客戶開發權限。
is-a : 純粹替代,extends。
is-like-a : 擴展替代,extends 與 implements。
子類與父類的關係並非平常生活中的父子關係,子類與父類而是一種特殊化與通常化的關係,是is-a的關係,子類是父類更加詳細的分類。
繼承後子類自動擁有了父類的屬性和方法,但特別注意的是,父類的私有屬性和構造方法並不能被繼承。
另外子類能夠寫本身特有的屬性和方法,目的是實現功能的擴展,子類也能夠複寫父類的方法即方法的重寫(overriding)。
一句話總結,
所謂繼承,就是可使用現有類的全部數據和方法(包括私有的),而且不須要重複編寫現有類,實現功能擴展,達到代碼複用。
注意:設計繼承的時候,若要讓某個類能繼承,父類需適當開放訪問權限,遵循里氏代換原則,即向修改關閉對擴展開放,也就是開-閉原則。
相同接口的對象,調用其相同的方法,參數也相同時,但表現的行爲卻不一樣。
多態分爲編譯時多態(又稱靜態多態),以及 運行時多態(又稱動態多態)。
編譯時多態,是指程序在編譯過程就能夠確認調用哪一個方法。
運行時多態,是指程序中的引用對象指向的哪一個具體類型,以及該對象經過哪一個具體方法調用,在編程中並不能肯定,只有在運行時肯定。這樣,咱們可讓引用對象綁定到不一樣的實現類上,從而實現該對象將有不一樣的具體方法調用,程序在運行時就有多個運行狀態。
實現編譯時多態:static、重載
實現運行時多態:繼承、重寫、向上轉型
---------------------------------------歷史分割線>>>-----------------------------------------------------
子類以父類的身份出現,但作事情時仍是以本身的方法(請注意是非private方法)實現。
子類以父類的身份出現須要向上轉型(upcast),其中向上轉型是由JVM自動實現的,是安全的,但向下轉型(downcast)是不安全的,須要強制轉換。
子類以父類的身份出現時本身特有的屬性和方法將不能使用。
注意:如下狀況可能多態無效:
一、private方法重載
二、屬性同名且能夠顯式訪問
三、static方法同名
---------------------------------------<<<歷史分割線-----------------------------------------------------
全部類都是繼承同一個根類(Object類),提供了極大的向後兼容性。