java面向物件思想和三大特性
面向物件:
1、面向物件
面向物件是一種程式設計思想,計算機程式的設計實質上就是將現實中的一些事物的特徵抽離出來描述成一些計算機事件的過程,這種抽象的過程中,我們把具體的事物封裝成一個一個的整體進行描述,使被描述的物件具備一些系統性、整體性的的行為和特徵,我們把這種設計思想稱為面向物件。
2、面向物件與面向過程
2.1、面向過程是早期的程式語言設計思想,該思想強調事物的行為細節,即程式的設計不需要封裝成一個個的整體,而是將整個程式描述成一個行為,所有行為細節都按照固定方式一步一步的執行,執行程式就是執行某一行為的過程。
2.2、面向物件和麵向過程都是一種思想,面向物件是相對於面向過程而言的,
面向過程強調的是具體的功能行為,而面向物件將功能封裝進物件,強調具備了功能的物件,面向物件是基於面向過程的,但面向物件思想更接近於現實場景。
三大特性:
1、封裝
1.1、封裝是指:隱藏物件的屬性和實現細節,僅對外提供公共訪問方式
1.2、封裝的好處:
(1)將外界的變化隔離,使程式具備獨立、安全和穩定性。
(2)便於設計者使用,提高程式碼的複用性
1.3、封裝的原則
(1)將不需要對外提供的內容都隱藏起來
(2)把實現細節隱藏,提供可以對其進行訪問公共的方式
1.4、封裝的方式
將某一功能、屬性抽離出來,獨立寫成單獨的方法或類
設定訪問許可權
(1)設定訪問許可權可以限定該功能或屬性可以被特定的訪問者訪問,保證了程式的安全性和功能的穩定性。
(2)java對類和類中成員都定義了特定的訪問修飾符
類:public(公共的) 、default(預設的,不寫就預設是它)
類中成員:public、protected、default(預設的)、private
注:類的訪問修飾符可以不寫(預設的),也可以寫public(公共的),一個java檔案中只能有一個被public修飾的類,且被public修飾的類類名必須要跟檔名一致(包括大小寫一致),否則編譯會出錯,為了方便閱讀,類名的命名規範是單詞的首字母大寫,多個單片語成的類名每個單詞的首字母都大寫
2、繼承
2.1、繼承是從已有的類中派生出新的類,新的類能吸收已有類的資料屬性和行為,並能擴充套件新的功能,或者說將事物的共性的功能和屬性抽取出來定義成一個父類,讓後來具有更多樣化實現的子類繼承父類。
2.2、繼承的作用:
(1)父類具備的方法子類可以直接繼承過來,不用重新書寫,提高了程式碼的複用性
(2)讓類與類之間產生關係,有了關係才有多型的實現
(3)Java中只支援單繼承,不支援多繼承,因為多繼承存在安全隱患(當多個父類存在同個功能時,子類不確定要執行哪一個),Java支援多層繼承,即父類還可以繼承其他類,java用另一種機制解決單繼承的侷限性,即多實現
2.3、對繼承體系的使用
(1)想要使用體系,應該先查閱父類,因為父類定義了該體系的共性功能,瞭解了父類的功能,就基本可以使用該體系的功能了
(2)在具體呼叫時,要建立子類的物件,因為有可能當父類是抽象類時父類不能建立物件,而且子類具備更豐富、更具體的功能實現
2.4繼承的特點
2.4.1覆蓋(重寫)
2.4.1.1如果子父類中的成員一致時,子類成員會覆蓋父類成員
2.4.1.2當子類繼承父類時,沿襲父類的功能到子類中,但子類對該功能的實現細節不一致,子類可以保留父類對該功能的定義,重寫功能的內容
2.4.1.3覆蓋與過載:過載只看引數列表,其他一致引數列表不一致為過載,而重寫子父類的引數必須要一致
2.4.2 this與super
this表示當前物件的引用,super表示當前物件父類的引用
2.5子父類中的建構函式
2.5.1建構函式不能重寫
2.5.1.1建構函式第一行有一條隱式的語句super()/this()
2.5.1.2在對子類物件進行初始化時,父類建構函式也會執行,因為子類中的建構函式預設第一行有一條隱式的super()語句,這樣方便子類構造時先獲取到父類的共性屬性
2.5.1.3 super()一定要定義在子類建構函式的第一行,當沒有預設的空引數建構函式,要手動指定
2.6、注意事項:
2.6.1千萬別為了獲取其他類中的功能而繼承,必須是類與類間有所屬關係才可以繼承。
2.6.2子類覆蓋父類時必須保證子類許可權大於等於父類,才可以覆蓋,否則編譯失敗
2.6.3子類靜態成員只能覆蓋父類靜態成員
2.7 final關鍵字
2.7.1 final關鍵字可以修飾類、函式和變數
2.7.2被final修飾的類不可以被繼承(繼承打破了封裝性)
2.7.3被final修飾的方法不可以被複寫
2.7.4被final修飾的變數只能被賦值一次,既可以修飾成員變數,也可以修飾
2.8 Object類
2.8.1java中有一個特殊的類,Object類,它是所有物件的超類(根類),Object類中定義了所有物件的共性成員
2.8.2Object類中的方法
equals() 比較兩個物件是否相同
toString() 返回該物件的字串表示形式
getClass() 獲取該物件對應的位元組碼檔案物件
hasCode() 獲取該物件的雜湊碼值
2.9類間的體系關係
繼承、聚集(聚合)、組合
2.9.1繼承:
指的是一個類繼承另外的一個類的功能,並增加它自己的新功能或改寫舊有功能的具體實現,繼承是類與類之間最常見的關係。
2.9.2聚合:
指的是整體與部分的關係。通常在定義一個整體類後,再去分析這個整體類的組成結構。從而找出一些組成類,該整體類和組成類之間就形成了聚合關係。例如足球隊中的足球隊員就是聚合關係。
2.9.3組合:
也表示類之間整體和部分的關係,但是組合關係中部分和整體具有統一的生存期。一旦整體物件不存在,部分物件也將不存在。部分物件與整體物件之間具有共生死的關係。例如人的各個身體器官之間的關係。
3、多型
3.1、多型的定義;某一類事物具備的多種表現形態(貓、狗和動物)
3.2、java中多型的表現形式
父類的引用指向自己的子類物件
父類的引用接收自己的子類物件
3.3、多型的前提
必須是類與類之間有關係,要麼繼承,要麼實現
子父類間的成員存在覆蓋
3.4、多型的好處與缺陷
好處是提高了程式的擴充套件性,缺陷是隻能使用父類的引用訪問父類的方法,無法訪問子類的特有方法。
3.5、多型的應用
型別轉換
向上轉型,自然轉型
向下轉型,強制父類引用向下轉型
3.6、特點
(1)多型中成員函式的特點
編譯時看引用變數所屬的類中是否有方法
執行時看物件所屬類的方法
(2)多型中成員變數的特點
無論編譯或執行時都參看右邊
多型中靜態成員函式的特點
編譯或執行時都參看左邊
3.7、多型的擴充套件示例
資料庫操作(各種資料庫):定義資料庫的父型別,由哪型別的資料庫呼叫就由該子類實現其具體操作內容。