面向物件(一)
阿新 • • 發佈:2020-12-14
1.面向過程和麵向物件?
1)面向過程的理解:
面向過程是將一個問題拆分成許多步驟實現
比如:將大象裝入冰箱,包括以下幾個步驟:
第一步、開啟冰箱
第二步、將大象放入
第三步、關上冰箱
面向過程關注的是實現的步驟,以函式為最小單位,考慮的是怎麼做。
2)面向物件的理解:
面向物件是將問題抽象化為多個類/物件,考慮誰來做。
比如:將大象裝入冰箱,包含大象,冰箱,人
如果把面向過程和麵向物件比喻成歷史,
面向過程是編年體史書;
面向物件是紀傳體史書;
3)區別和優缺點:
區別:
面向過程關注解決問題的過程,以函式為最小單位,考慮怎麼做;
面向物件關注解決問題的物件,已類/物件為最小單位,考慮誰來做;
優缺點:
面向過程佔用的資源少,速度快;面向物件佔用的資源多,速度低;但是面向物件創造一次,重複使用,方便複用和擴充套件。
2.面向物件的3大基本特徵
1)封裝
將類中的屬性和方法提供給可信任的類和物件操作,對不可信的類和物件進行隱藏。
public > protected > default > private
把該隱藏的隱藏,該暴露的暴露,提高了程式碼的安全性。
1 public class Girl 2 { 3 private int age; 4 5 public int getAge() 6 { 7 return this.age; 8 } 9 10 public void setAge(int age) 11 {12 if(age > 25) 13 { 14 this.age = 18; 15 } 16 else { 17 this.age = age; 18 } 19 } 20 }
2)繼承
對於現有類的所有功能,可以在不修改原有類的基礎上,對其進行擴充套件。
通過繼承得到的新類成為"子類"或者派生類;
原來類成為"父類"或者"基類"。
提高了程式碼的擴充套件性。
3)多型
多型是指一個類例項的相同方法,在不同情形下有不同的表現形式。
多型需要3個條件:
第一、需要繼承或者介面實現;
第二、子類重寫父類方法;
第三、父類引用指向子類物件。
1 public class Parent{ 2 3 public void call(){ 4 sout("im Parent"); 5 } 6 } 7 8 public class Son extends Parent{// 1.有類繼承或者介面實現 9 public void call(){// 2.子類要重寫父類的方法 10 sout("im Son"); 11 } 12 } 13 14 public class Daughter extends Parent{// 1.有類繼承或者介面實現 15 public void call(){// 2.子類要重寫父類的方法 16 sout("im Daughter"); 17 } 18 } 19 20 public class Test{ 21 22 public static void main(String[] args){ 23 Parent p = new Son(); //3.父類的引用指向子類的物件 24 Parent p1 = new Daughter(); //3.父類的引用指向子類的物件 25 } 26 }
多型是一種動態繫結,是程式執行期特性,方法的重寫是一種多型;傾向於認為方法的過載不是一種靜態多型。