<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ThinkChat2.0新版上線,更智能更精彩,支持會話、畫圖、視頻、閱讀、搜索等,送10W Token,即刻開啟你的AI之旅 廣告
                # Java OOP 概念 – 面向對象的原則 > 原文: [https://howtodoinjava.com/oops/object-oriented-principles/](https://howtodoinjava.com/oops/object-oriented-principles/) 在本 **Java OOP 概念**教程中,我們將學習四個主要的**面向對象原理** – **抽象**,**封裝**,**繼承**和**多態**。 它們也被稱為**面向對象編程范式**的四個支柱。 > 1. ***抽象***是公開實體基本細節的過程,同時忽略了無關緊要的細節,從而為用戶降低了復雜性。 > 2. ***封裝***是將數據和對數據的操作捆綁在一起的過程。 > 3. ***繼承***用于從現有類型派生新類型,從而建立父子關系。 > 4. ***多態***使實體在不同的上下文中具有不同的含義。 ```java Table of Contents 1\. Abstraction 2\. Encapsulation 3\. Inheritance 4\. Polymorphism ``` ## 1\. 抽象 將 OOP 中的與實時示例相關聯時,很容易理解。例如,當您開車時,您不必擔心汽車的內部運行情況。 您所關心的是通過方向盤,制動踏板,油門踏板等接口與汽車交互。在這里,您對汽車的了解是[抽象](https://howtodoinjava.com/oops/understanding-abstraction-in-java/)的。 在計算機科學中,抽象是這樣的過程,在該過程中,數據和程序以其形式(*語義*)的形式類似于其含義的形式定義,同時隱藏了實現細節。 用更簡單的術語來說,抽象是**隱藏與上下文**不相關的信息,或者僅顯示相關信息,并通過將其與現實世界中的相似內容進行比較來簡化該信息。 抽象僅捕獲與當前視角相關的對象的那些細節。 通常,可以通過兩種方式查看抽象: 1. #### 數據抽象 數據抽象是從多個較小的數據類型中創建復雜的數據類型的方法,該類型更接近于現實生活中的實體。 例如 `Employee`類可能是具有各種小型關聯的復雜對象。 ```java public class Employee { private Department department; private Address address; private Education education; //So on... } ``` 因此,如果您想獲取某個員工的信息,則可以從`Employee`對象中詢問該信息 – 就像您在現實生活中一樣,請詢問此人本身。 2. #### 控制抽象 通過將復雜任務的動作序列隱藏在一個簡單的方法調用中,可以實現控制抽象,因此可以從客戶端隱藏執行任務的邏輯,并且將來可以更改該邏輯而不會影響客戶端代碼。 ```java public class EmployeeManager { public Address getPrefferedAddress(Employee e) { //Get all addresses from database //Apply logic to determine which address is preferred //Return address } } ``` 在上面的示例中,明天如果您要更改邏輯,以使每次本地地址始終都是首選地址,則將更改`getPrefferedAddress()`方法內部的邏輯,并且客戶端將不受影響。 > **閱讀更多:[了解 Java 中的抽象](//howtodoinjava.com/object-oriented/understanding-abstraction-in-java/)** ## 2\. 封裝 **將類**中的數據和方法與實現隱藏(通過訪問控制)結合起來通常稱為 OOP 中的[封裝](https://howtodoinjava.com/oops/encapsulation-in-java-and-its-relation-with-abstraction/)。 結果是具有特征和行為的數據類型。 封裝本質上既具有信息隱藏又具有實現隱藏。 > “ **不管有什么變化,都將其封裝**” – 著名的設計原理 **信息隱藏**是通過使用[訪問控制修飾符](https://howtodoinjava.com/oops/java-access-modifiers/)(公共,私有,受保護的)完成的,而實現隱藏是通過創建類的接口來實現的。 **實現隱藏**使設計人員可以自由修改對象如何履行職責。 這在設計(甚至需求)可能會發生變化的點上特別有價值。 讓我們以一個例子來使它更清楚。 #### 2.1 信息隱藏 ```java class InformationHiding { //Restrict direct access to inward data private ArrayList items = new ArrayList(); //Provide a way to access data - internal logic can safely be changed in future public ArrayList getItems(){ return items; } } ``` #### 2.2 實現隱藏 ```java interface ImplemenatationHiding { Integer sumAllItems(ArrayList items); } class InformationHiding implements ImplemenatationHiding { //Restrict direct access to inward data private ArrayList items = new ArrayList(); //Provide a way to access data - internal logic can safely be changed in future public ArrayList getItems(){ return items; } public Integer sumAllItems(ArrayList items) { //Here you may do N number of things in any sequence //Which you do not want your clients to know //You can change the sequence or even whole logic //without affecting the client } } ``` > 閱讀更多:Java 中的[封裝](//howtodoinjava.com/object-oriented/encapsulation-in-java-and-its-relation-with-abstraction/) ## 3\. 繼承 [繼承](https://howtodoinjava.com/oops/java-inheritance/)是面向對象編程中的另一個重要概念。 Java 中的**繼承**是一種機制,通過該機制,一個對象可以獲取父對象的屬性和行為。 本質上是在類之間創建父子關系。 在 Java 中,主要將繼承用于代碼的可重用性和可維護性。 關鍵字`extends`用于**繼承 Java** 中的類。 關鍵字`extends`表示您正在制作一個新類,該新類是從現有類中派生的。 在 Java 術語中,被繼承的類稱為**超類**。 新類稱為**子類**。 子類從其超類繼承所有非私有成員(字段,方法和嵌套類)。 構造器不是成員,因此它們不會被子類繼承,但是可以從子類調用超類的[構造器](https://howtodoinjava.com/oops/java-constructors/)。 例如 ```java class Employee { private Department department; private Address address; private Education education; //So on... } class Manager extends Employee { private List<Employee> reportees; } ``` 在上面的示例中,`Manager`是`Employee`的專用版本,可重用`Employee`類別中的部門,地址和教育,并定義其自己的報告人列表。 ## 4\. 多態 [**多態**](https://howtodoinjava.com/oops/what-is-polymorphism-in-java/)是一種能力,通過這種能力,我們可以創建在不同程序環境下表現不同的函數或參考變量。 在 Java 語言中,多態本質上被認為是兩個版本: * 編譯時多態(靜態綁定或**方法重載**) * 運行時多態(動態綁定或**方法覆蓋**) > 閱讀更多:Java 中的[**多態**](//howtodoinjava.com/object-oriented/what-is-polymorphism-in-java/) 上面是四個 Java OOP 概念,我建議您對每個概念都有一個很好的了解。 學習愉快! 參考文獻: [https://docs.oracle.com/javase/tutorial/java/concepts/](https://docs.oracle.com/javase/tutorial/java/concepts/) [http://c2.com/cgi/wiki?InformationHiding](http://c2.com/cgi/wiki?InformationHiding)
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看