Java 菜鳥教程

Java 流程控制

Java 數(shù)組

Java 面向?qū)ο?I)

Java 面向?qū)ο?II)

Java 面向?qū)ο?III)

Java 異常處理

Java 列表(List)

Java Queue(隊列)

Java Map集合

Java Set集合

Java 輸入輸出(I/O)

Java Reader/Writer

Java 其他主題

Java 封裝

在本教程中,您將借助示例學(xué)習(xí)Java中的封裝和數(shù)據(jù)隱藏。

Java 封裝

封裝是面向?qū)ο缶幊痰闹匾δ苤?。封裝是指將字段和方法綁定在單個類中。

將類中的類似字段和方法捆綁在一起也有助于隱藏數(shù)據(jù)。

封裝字段和方法

通常,封裝是將類似代碼包裝在一個地方的過程。

在Java中,我們可以將在單個類中一起操作的字段和方法捆綁在一起。例如,

class Rectangle {
   int length;
   int breadth;
   public void getArea() {}
}

在上面的程序中,getArea()方法計算矩形的面積。為了計算面積,它需要長度(length)和寬度(breadth)。因此,數(shù)據(jù)字段length、breadth和方法getArea()被放在Rectangle類中。

Java 數(shù)據(jù)隱藏

數(shù)據(jù)隱藏是一種通過隱藏實(shí)現(xiàn)細(xì)節(jié)來限制數(shù)據(jù)成員訪問的方法。

封裝還提供了一種隱藏數(shù)據(jù)的方法。

數(shù)據(jù)隱藏可以通過訪問修飾符來實(shí)現(xiàn)。在Java中,有四個訪問修飾符:

  • public - 修飾的屬性或方法是公有的,可以在任何地方被訪問到,默認(rèn)所有的屬性和方法都是 public 的

  • private - 修飾的屬性或方法是私有的,不能在聲明它的類的外部訪問

  • protected - 修飾的屬性或方法是受保護(hù)的,它和 private 類似,區(qū)別是它在子類中也是允許被訪問的

  • default - 即不加任何訪問修飾符,通常稱為“默認(rèn)訪問模式“。該模式下,只允許在同一個包中進(jìn)行訪問。

要了解更多信息,請訪問Java 修飾符。

示例1:使用 private 數(shù)據(jù)隱藏

class Person {
   private int age;

   public int getAge() {
      return age;
   }

   public void setAge(int age) {
      this.age = age;
   }
}

class Main {
   public static void main(String[] args) {
      Person p1 = new Person();
      p1.setAge(24);
      System.out.println("我的年齡是 " + p1.getAge());
   }
}

輸出結(jié)果

我的年齡是 24

在上面的實(shí)例中,我們有一個private字段age。因?yàn)樗撬接械?,所以不能從類外部訪問它。為了訪問age,我們使用了公共方法getAge()和setAge()。這些方法稱為getter和setter方法。

如果嘗試從Main類中訪問age字段,則會出現(xiàn)錯誤消息。

p1.age = 24;     // error: age has private access in Person

將age設(shè)置為私有,可以限制來自類外部未經(jīng)授權(quán)的訪問。這是數(shù)據(jù)隱藏。

示例2:使用 protected 數(shù)據(jù)隱藏

class Person {
 protected String profession;

 protected void displayInfo() {
   System.out.println("I am a " + profession);
 }
}

class Teacher extends Person {
   public static void main(String[] args) {
      Teacher t1 = new Teacher();
      t1.profession = "teacher";
      t1.displayInfo();
   }

}

輸出結(jié)果

I am a teacher

在上面的程序中,我們創(chuàng)建了一個Person類,其中包含protected字段 profession 和protected方法displayInfo()。

我們已經(jīng)從Teacher類(Person的子類)訪問了這些成員。

為什么要封裝?

  • 在Java中,封裝可幫助我們將相關(guān)的字段和方法保持在一起,從而使我們的代碼更整潔且易于閱讀。

  • 它有助于控制我們數(shù)據(jù)字段的修改。 考慮一種情況,我們希望類中的age字段為非負(fù)數(shù)。 在這里,我們可以將age設(shè)為私有,并可以在setAge()方法內(nèi)部應(yīng)用邏輯。 例如,

class Person {
   private int age;

   public void setAge(int age) {
     if (age >= 0) {
        this.age = age;
     }
   }
}
  • getter和setter方法提供對我們的類字段的只讀或只寫訪問。例如,

getName()   // 提供只讀訪問
setName()   //提供只寫訪問
  • 它有助于解耦系統(tǒng)的組件。這些解耦的組件可以獨(dú)立且同時進(jìn)行開發(fā),測試和調(diào)試。并且,特定組件的任何更改都不會對其他組件產(chǎn)生任何影響。

數(shù)據(jù)隱藏 與 封裝

人們通常認(rèn)為封裝是數(shù)據(jù)隱藏,但這并不完全正確。

封裝是指將相關(guān)字段和方法捆綁在一起。這使得我們能夠?qū)崿F(xiàn)數(shù)據(jù)隱藏。封裝本身并不是數(shù)據(jù)隱藏。

丰满人妻一级特黄a大片,午夜无码免费福利一级,欧美亚洲精品在线,国产婷婷成人久久Av免费高清