1. 程式人生 > >Java基礎語法(10)-面向物件之三大特徵

Java基礎語法(10)-面向物件之三大特徵

> title: **Java基礎語法(9)-面向物件之類的成員** > > blog: [CSDN](https://blog.csdn.net/BenCoper) > > data: [Java學習路線及視訊](https://www.cnblogs.com/bencoper/p/12558477.html) ### 1.面向物件特徵--封裝 1. **為什麼需要封裝?封裝的作用和含義?** 我要用洗衣機,只需要按一下開關和洗滌模式就可以了。有必要了解洗衣機內部的結構嗎?有必要碰電動機嗎? 我要開車,… 隱藏物件內部的複雜性,只對外公開簡單的介面。便於外界呼叫,從而提高系統的可擴充套件性、可維護性。通俗的說,把該隱藏的隱藏起來,該暴露的暴露出來。這就是封裝性的設計思想。 2. **資訊的封裝和隱藏** Java中通過將資料宣告為私有的(private),再提供公共的(public)方法: getXxx()和setXxx()實現對該屬性的操作 ```java class Animal { private int legs; // 將屬性legs定義為private,只能被Animal類內部訪問 public void setLegs(int i) { if (i != 0 && i != 2 && i != 4) { System.out.println("Wrong number of legs!"); return; } legs = i; } public int getLegs() { return legs; } } ``` ```java public class Zoo { public static void main(String args[]) { Animal xb = new Animal(); xb.setLegs(4); // System.out.println(xb.getLegs()); } } ``` 3. 四種訪問許可權修飾符 Java許可權修飾符public、protected、(預設)、private置於類的成員定義前,用來限定物件對該類成員的訪問許可權。 | **修飾符** | **類內部** | **同一個包** | **不同包的子類** | **同一個工程** | | ---------- | :--------: | :----------: | :--------------: | :------------: | | private | Yes | | | | | (預設) | Yes | Yes | | | | protected | Yes | Yes | Yes | | | public | Yes | Yes | Yes | Yes | 對於class的許可權修飾只可以用public和default(預設)。 public類可以在任意地方被訪問 default類只可以被同一個包內部的類訪問 ### 2.面向物件特徵--繼承 1. **為什麼要有繼承?** 多個類中存在相同屬性和行為時,將這些內容抽取到單獨一個類中,那麼多個類無需再定義這些屬性和行為,只要繼承那個類即可。 此處的多個類稱為子類(派生類),單獨的這個類稱為父類(基類或超類)。可以理解為:“子類 is a 父類” 2. **類繼承語法規則:** class Subclass extends SuperClass{ } 3. **作用:** - 繼承的出現減少了程式碼的冗餘,提高程式碼的複用性 - 繼承的出現,更有利於功能的擴充套件 - 繼承的出現讓類與類之間產生了關係,提供了多型的前提。 4. **規則:**
- Java只支援單繼承和多層繼承,不允許多重繼承 - 一個子類只能有一個父類 - 一個父類可以派生出多個子類 5. **單繼承與多層繼承舉例** ### 3.面向物件特徵-多型性 1. **多型的作用** - 父類的引用指向子類的物件 2. **規則** - 編譯時,看左邊;執行時,看右邊。 3. **向上轉型** - 在Java中,子類的物件可以替代父類的物件使用 ```java Person p = new Student(); Object o = new Person(); //Object型別的變數o,指向Person型別的物件 o = new Student(); //Object型別的變數o,指向Student型別的物件 ``` - 子類可看做是特殊的父類,所以父類型別的引用可以指向子類的物件:向上轉型(upcasting)。 4. **動態繫結** - 編譯時e為Person型別,而方法的呼叫是在執行時確定的,所以呼叫的是Student類的getInfo()方法 ```java public class Test { public void method(Person e) { e.getInfo(); } public static void main(Stirng args[]) { Person e = new Person(); e.getInfo(); } ``` 5. **instanceof關鍵字** - 作用:用來判斷某個物件是否屬於某種資料型別。 - 注意: 返回型別為布林型別 ```java Fu f1=new Zi(); Fu f2=new Son(); if(f1 instanceof Zi){ System.out.println("f1是Zi的型別"); } else{ System.out.println("f1是Son的型別"); } ``` 6. 向下轉型 - 一個已經向上轉型的子類物件可以使用強制型別轉換的格式,將父類引用型別轉為子類引用各型別 - 子類型別 變數名=(子類型別) 父類型別的變數; ```java public class Main { public static void main(String[] args) { Person person = new Superman(); Superman s = (Superman)person; //向下轉型 s.sleep(); s.fly(); s.eat(); } } ``` ### 4.結語
2020-3-31: [Java基礎語法(8)-陣列中的常見排序演算法](https://www.cnblogs.com/bencoper/p/12616335.html) 2020-3-31: [Java基礎語法(9)-面向物件之類的成員](https://www.cnblogs.com/bencoper/p/12616347.html) - 今日好文推薦 - [一文帶你入門Java Stream流,太強了](https://blog.csdn.net/qing_gee/article/details/105238960) - [學歷低,無法勝任工作,大佬告訴你應該怎麼做](https://blog.csdn.net/qing_gee/article/details/104628849) - 今日資料推薦 - [我的Java自學之路](https://how2j.cn?