亚洲区国产区激情区无码区,国产成人mv视频在线观看,国产A毛片AAAAAA,亚洲精品国产首次亮相在线

Java 菜鳥(niǎo)教程

Java 流程控制

Java 數(shù)組

Java 面向?qū)ο?I)

Java 面向?qū)ο?II)

Java 面向?qū)ο?III)

Java 異常處理

Java 列表(List)

Java Queue(隊(duì)列)

Java Map集合

Java Set集合

Java 輸入輸出(I/O)

Java Reader/Writer

Java 其他主題

Java 封裝

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

Java 封裝

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

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

封裝字段和方法

通常,封裝是將類(lèi)似代碼包裝在一個(gè)地方的過(guò)程。

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

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

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

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

數(shù)據(jù)隱藏是一種通過(guò)隱藏實(shí)現(xiàn)細(xì)節(jié)來(lái)限制數(shù)據(jù)成員訪(fǎng)問(wèn)的方法。

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

數(shù)據(jù)隱藏可以通過(guò)訪(fǎng)問(wèn)修飾符來(lái)實(shí)現(xiàn)。在Java中,有四個(gè)訪(fǎng)問(wèn)修飾符:

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

  • private - 修飾的屬性或方法是私有的,不能在聲明它的類(lèi)的外部訪(fǎng)問(wèn)

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

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

要了解更多信息,請(qǐng)?jiān)L問(wè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í)例中,我們有一個(gè)private字段age。因?yàn)樗撬接械?,所以不能從?lèi)外部訪(fǎng)問(wèn)它。為了訪(fǎng)問(wèn)age,我們使用了公共方法getAge()和setAge()。這些方法稱(chēng)為getter和setter方法。

如果嘗試從Main類(lèi)中訪(fǎng)問(wèn)age字段,則會(huì)出現(xiàn)錯(cuò)誤消息。

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

將age設(shè)置為私有,可以限制來(lái)自類(lèi)外部未經(jīng)授權(quán)的訪(fǎng)問(wè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)建了一個(gè)Person類(lèi),其中包含protected字段 profession 和protected方法displayInfo()。

我們已經(jīng)從Teacher類(lèi)(Person的子類(lèi))訪(fǎng)問(wèn)了這些成員。

為什么要封裝?

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

  • 它有助于控制我們數(shù)據(jù)字段的修改。 考慮一種情況,我們希望類(lèi)中的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方法提供對(duì)我們的類(lèi)字段的只讀或只寫(xiě)訪(fǎng)問(wèn)。例如,

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

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

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

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