1. 面向對象
1.1 什么是面向對象
面向對象是一種思想,是基於面向過程而言的,就是說面向對象是將功能等通過對象來實現,將功能封裝進對象之中,讓對象去實現具體的細節。
對比面向過程,是兩種不同的處理問題角度。
面向過程更注重事情的每一步驟和順序,而面向對象更注重事情有哪些參與者(對象)、以及各自需要做些什么。
例如:冰箱裝大象
面向過程會將任務分解成一系列的步驟(函數):
1. 打開冰箱
2. 把大象裝進去
3. 關上冰箱
面向對象會分解成兩個對象:
冰箱: 存放大象 打開冰箱 關上冰箱
大象 : 進入冰箱
從這個例子可以看出,面向過程比較直接高效,而面向對象更易於復用、擴展和維護。
1.2 面向對象三大特性
談到面向對象了就不能不談Java面向對象的三大特性了。
分別是封裝、基礎和多態。
1.2.1 封裝
封裝是一個面向對象的術語,其含義其實很簡單,就是把東西包裝起來。封裝的意義在於明確標識出允許外部使用的所有成員方法和數據。
將類的某些信息隱藏在類的內部,不允許外部程序直接訪問,並通過該類提供的方法來實現對隱藏信息的操作和訪問。(簡單的說就是隱藏對象的信息,留出訪問的接口)。
特點:1.只能通過規定的方法訪問數據;2.隱藏類的實例細節,方便修改和實現。
例如:
javabean的屬性私有,提供get/set方法對外訪問,因為屬性的賦值或者獲取邏輯只能由javabean本身決定。而不能由外部胡亂修改。
1.2.2 繼承
在Java中就是創建一個父類,用 extends 關鍵字繼承。
在現實中就是兒子繼承父親財產這種。
繼承可以理解為一個類從另一個類獲取方法和屬性的過程。如果類B繼承於類A,那么B就擁有A的方法和屬性,可以直接使用。
例如:
父類為狗類,有年齡、體型這些屬性,還有吃飯、睡覺等特性。
子類繼承父類的這些特性,然后進行專項訓練,訓練導盲的能力成為導盲犬,訓練追查毒品的能力成為緝毒犬。
它們都有從父類繼承下來的屬性和特性,也有后天訓練出來的專業技能。
總結:子類共性的方法或者屬性總結使用父類的,而不需要自己再定義,只需要擴展自己的個性化方法。
1.2.3 多態
什么是多態?
多態就是多種形態。在自然界中碳的多態就有石墨、鑽石等,水分子的多態就有水、冰、水蒸氣等。同一個操作,由於條件的不同,產生的結果也不同。
在Java中,就是基於對象所屬類的不同,外部對同一個方法的調用,實際執行邏輯不同。
想要使用多態,就要用上繼承、方法重寫,用父類引用指向子類對象。
父類對象 變量名 = new 子類對象(); 變量名.方法名();
我們在使用的時候 只需要改變子類對象,就可以實現不同的效果,實際開發中多用於接口,例如常用的數據庫操作接口,完成增刪改查等效果。
也舉一個栗子吧:
// 父類 動物類 class Animal { public void eat(){ System.out.println("吃飯"); } } //子類 狗類 class Dog extends Animal { public void eat(){ System.out.println("狗吃肉"); } public void lookDoor(){ System.out.println("狗看門"); } } //子類 貓類 class Cat extends Animal { public void eat(){ System.out.println("貓吃魚"); } public void atchingMice(){ System.out.println("貓抓老鼠"); } } class DuoTaiDemo { public static void main(String[] args) { //定義為狗 Animal animal = new Dog(); animal.eat(); // 無法調用子類特有功能 也就是說我們只能調用父類中有的方法 // animal.lookDoor(); System.out.println("-------------------------------"); // 還原成狗 Dog dog = (Dog)animal; dog.eat(); dog.lookDoor(); System.out.println("-------------------------------"); // 變成貓 animal = new Cat(); animal.eat(); System.out.println("-------------------------------"); // 還原成貓 Cat cat = (Cat)animal; cat.eat(); cat.atchingMice(); System.out.println("-------------------------------"); } }
我們無法調用子類特有功能
需要注意的幾個點:
不能用子類new父類,例如狗是動物,但動物不是狗。
不能用子類new子類,例如貓不是狗,狗不是貓。
左邊要是大類型,右邊是小類型。