<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智能體構建引擎,智能編排和調試,一鍵部署,支持知識庫和私有化部署方案 廣告
                這一節我們學習面向對象中的第一個特性,封裝(encapsulation) 封裝:是指隱藏對象的發生和實現細節,僅對外提供公共訪問方式. 那么什么是隱藏對象的實現細節?我們來舉例學習. 比如我們來定義一個人的類,簡單點說,人的屬性有年齡,行為有說話. 我們看下面的代碼: ~~~ class Person//定義一個人的類 { int age; void speak() { System.out.println("age = "+age); } } class PersonDemo//定義測試類 { public static void main(String[] args) { Person p = new Person(); p.age = -20;//這時代碼仍然正常運行了,這就造成了安全隱患 p.speak(); } } ~~~ 結果: ![](https://box.kancloud.cn/2016-05-18_573c41af62be0.jpg) 我們看到存在安全隱患,當我們為人的年齡屬性賦值為負數時,程序是正常運行的. 那么現在把Person類修改一下 ~~~ <pre name="code" class="java">class Person { private int age; void speak() { System.out.println("age = "+age); } } ~~~ ~~~ ~~~ 結果: ![](https://box.kancloud.cn/2016-05-18_573c41af73230.jpg) 我們看到報錯了,因為我們對age進行了私有,在PersonDemo類中無法訪問. 為了進一步解決問題,我們再對兩個類進行修改: ~~~ class Person { private int age;//把該成員屬性設置為私有 public void setAge(int a) { if(a>0 && a<130) { age = a; speak(); } else System.out.println("錯誤的數據"); } void speak() { System.out.println("age = "+age); } } class PersonDemo { public static void main(String[] args) { Person p = new Person(); p.setAge(-20);//調用方法設置年齡,但是我們不知道該方法的內部實現 } } ~~~ 結果: ![](https://box.kancloud.cn/2016-05-18_573c41af86870.jpg) 我們看到當age>0 && age<130時,才合法. 從這個過程我們看到,當我們要操作Person中的age屬性時,是通過setAge方法來實現的,但是setAge方法是怎么實現的,外部類是無法知道的,這就是我們所要說的隱藏對象的屬性和實現細節,也就是封裝. 其實對于屬性的封裝,為了外部訪問,我們一般有規范的get和set方法,我們來看一下兩個規范且常用的方法: ~~~ class Person { private int age;//把該成員屬性設置為私有 public void setAge(int a)//設置年齡 { age = a; } public int getAge()//獲取年齡 { return age; } } ~~~ 下面我們再來說說封裝的優點和原則: 優點: 1.提高代碼安全性; 2.實現對內部屬性的可控性; 3.提高代碼的復用性; 4.隔離變化; 原則: 1.將不需要對外提供的內容都隱藏起來; 2.把屬性都隱藏起來,提供公共方法供外部訪問(當然不是所有方法都必須是公共方法). 最后我們再看一下剛才我們用到的一個關鍵字:private. **private關鍵字**:指私有,是一個權限修飾符,用于修飾成員.私有的內容只在本類中有效. 它的常見用法:就是將成員變量私有化,對外提供對應的set,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>

                              哎呀哎呀视频在线观看