<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>

                企業??AI智能體構建引擎,智能編排和調試,一鍵部署,支持知識庫和私有化部署方案 廣告
                # Java 封裝與抽象 > 原文: [https://howtodoinjava.com/oops/encapsulation-in-java-and-its-relation-with-abstraction/](https://howtodoinjava.com/oops/encapsulation-in-java-and-its-relation-with-abstraction/) 你們中的大多數人都同意封裝和抽象在一起會帶來很多混亂。 大多數博客只會進一步增加混亂。 讓我們解決這個難題。 在上一篇文章“[了解 Java 中的抽象](//howtodoinjava.com/object-oriented/understanding-abstraction-in-java/ "Understanding abstraction in java")”之后,我開始撰寫此文章。 我的目標是了解 Java 中的封裝及其與抽象的關系。 一開始,我就開始陷入前所未有的混亂之中。 在瀏覽了多個小時并閱讀了一些寫得很好以及令人困惑的博客條目之后,我能夠做出一些清晰的理解。 跟隨我的足跡 ```java Table of Contents Encapsulation in simple words Encapsulation in Detail Encapsulation vs Abstraction ``` ## 簡單的封裝 將類中的數據和方法與實現隱藏(通過訪問控制)結合起來通常稱為封裝。 結果是具有特征和行為的數據類型。 **封裝實質上具有信息隱藏和實現隱藏兩者。** ## 詳細封裝 我在某處讀過它:“**進行任何更改,將其封裝**”。 它被引用為著名的設計原則。 因此,在任何類中,運行時中的數據都可能發生更改,將來的發行版中可能會更改實現。 因此,封裝既適用于數據也適用于實現。 訪問控制或實現隱藏將邊界置于數據類型或類中,這有兩個重要原因。 首先是確定客戶端程序員可以使用和不能使用的東西。 這直接導致了第二個原因,那就是將接口與實現分開。 如果您確定客戶端程序員除了將消息發送到公共接口之外什么也不能做,那么您可以隨意更改不公開的任何內容(例如,包訪問,受保護或私有),而不會破壞客戶端代碼。 封裝可以幫助您實現這一保證。 ## 封裝與抽象 如果您讀完了[上一篇](//howtodoinjava.com/object-oriented/understanding-abstraction-in-java/ "Understanding abstraction in java"),您將看到抽象本質上是一個主意,這有助于設置指導原則。 封裝是我們實現所需抽象的機制。 簡而言之,從 OOAD 的角度來看: * 抽象更多地涉及“**類可以做什么**”。(**想法**) * 封裝更多地涉及“**如何**”來實現該功能。(**實現**) 我在很多博客上都看到了與此理論相矛盾的地方。 因此,如果您也不同意這一點,請多多包涵。 另外,我將要求您對與主題相關的想法發表評論。 我會很樂意嘗試聯系或否定。 展望未來,我將以我們眾所周知的類[`HashMap`](//howtodoinjava.com/java/collections/how-hashmap-works-in-java/)為例。 此類負責存儲鍵值對,基于鍵進行搜索并執行更多操作。 從外部,客戶端代碼僅知道方法名稱及其行為。 它調用了這些方法,并快樂地生活著。 這實際上是抽象準則。 抽象表示,客戶端代碼應調用添加鍵值對的方法,基于鍵檢索值的方法等。 應該怎么做? 不是抽象業務。 當您開始編寫實際代碼時,封裝就到了。 您編寫`HashMap.Entry`類,并創建類型為`Entry[]`的變量*表*。 然后,您將所有此類內容聲明為私有,并僅允許`put()`和`get()`方法等公共訪問。這實際上是封裝。 *您所需的抽象*的實現。 希望您更加清楚 **Java 封裝**,以及**與抽象**的區別。 學習愉快!
                  <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>

                              哎呀哎呀视频在线观看