一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - Java教程 - Java基礎第四篇 封裝與接口

Java基礎第四篇 封裝與接口

2021-12-27 14:21Vamei Java教程

本文將對介紹Java 的封裝與接口進行介紹,將要封裝(encapsulation)對象的成員(成員包括數據成員和方法),從而只允許從外部調用部分的成員。利用封裝,我們可以提高對象的易用性和安全性。想具體了解的小伙伴請參考下面文章的內

前言:

總結之前的內容,對象(object)指代某一事物,類(class)指代象的類型。對象可以有狀態和動作,即數據成員和方法。

到現在為止,數據成員和方法都是同時開放給內部和外部的。在對象內部,我們利用this來調用對象的數據成員和方法。在對象外部,比如當我們在另一個類中調用對象的時,可以使用 對象.數據成員對象.方法() 來調用對象的數據成員和方法。

 

1、封裝與接口

封裝(encapsulation)是計算機常見的術語,即保留有限的外部接口(interface),隱藏具體實施細節。比如在Linux架構,就可以看到Linux操作系統封裝了底層硬件的具體細節,只保留了系統調用這一套接口。用戶處在封裝的外部,只能通過接口,進行所需的操作。

封裝在生活中很常見。比如下面是一個充電電筒:

Java基礎第四篇 封裝與接口

一個用戶即使不看說明書,也可以猜到這個電筒的操作: 開關和充電。這個電筒用一個塑料殼將用戶不需要接觸的內部細節隱藏起來,只保留了兩個接口,開關和電插頭。使用這兩個接口,用戶足以使用該產品在設計中想要實現的功能。如果所有的細節都同時暴露給用戶,那么用戶會對產品感到不知所措 (比如下面不加殼的遙控器)。因此,封裝提高了產品的易用性

Java基礎第四篇 封裝與接口

 

如果產品不封裝,電筒或者遙控器的許多細節會暴露在用戶面前: 電池、電路、密封的橡膠等等。盡管這可以讓用戶更自由的對產品實施操作,比如直接給電池放電,取出一個LED燈等等。然而,用戶往往要承擔更大的損壞產品的風險。因此,封裝提高了產品的安全性

 

一個Java軟件產品與一個日常產品相同。一個對象內部可以有許多成員(數據成員和方法)。有一些數據成員和方法只是內部使用。這時,我們會希望有一個給對象“加殼”的機制,從而封裝對象。這樣,用戶可以比較容易學習和使用外部的接口,而不必接觸內部成員。

 

2、對象成員的封裝

Java通過三個關鍵字來控制對象的成員的外部可見性(visibility): public, private, protected

  • public: 該成員外部可見,即該成員為接口的一部分
  • private: 該成員外部不可見,只能用于內部使用,無法從外部訪問。

(protected涉及繼承的概念,放在以后說)

我們先來封裝以前定義的Human類:

public class Test
{
  public static void main(String[] args)
  {
      Human aPerson = new Human(160);
      System.out.println(aPerson.getHeight());
      aPerson.growHeight(170);
      System.out.println(aPerson.getHeight());
      aPerson.repeatBreath(100);
  }

}

class Human
{
  /**
   * constructor
   */
  public Human(int h)
  {
      this.height = h;
      System.out.println("I'm born");
  }

  /**
   * accessor
   */
  public int getHeight()
  {
     return this.height;
  }

  /**
   * mutator
   */
  public void growHeight(int h)
  {
      this.height = this.height + h;
  }

   /**
    * encapsulated, for internal use
    */
  private void breath()
  {
      System.out.println("hu...hu...");
  }


 /**
  * call breath()
  */
  public void repeatBreath(int rep)
  {
      int i;
      for(i = 0; i < rep; i++) {
          this.breath();
      }
  }

  private int height; // encapsulated, for internal use
}


內部方法并不受封裝的影響。Human的內部方法可以調用任意成員,即使是設置為privateheightbreath()

外部方法只能調用public成員。當我們在Human外部時,比如Test中,我們只能調用Human中規定為public的成員,而不能調用規定為private的成員。

通過封裝,Human類就只保留了下面幾個方法作為接口:

  • getHeight()
  • growHeight()
  • repBreath()

我們可以將Human類及其接口表示為如下圖的形式:

Java基礎第四篇 封裝與接口

上圖就如“加了殼的遙控器”

如果我們從main中強行調用height:

System.out.println(aPerson.height);

將會有如下錯誤提示:

Test.java:6: height has private access in Human
      System.out.println(aPerson.height);
                                ^
1 error

Beep, 你觸電了! 一個被說明為private的成員,不能被外部調用。

在Java的通常規范中,表達狀態的數據成員(比如height)要設置成private。對數據成員的修改要通過接口提供的方法進行(比如getHeight()和growHeight())。這個規范起到了保護數據的作用。用戶不能直接修改數據,必須通過相應的方法才能讀取和寫入數據。類的設計者可以在接口方法中加入數據的使用規范。

 

3、類的封裝

在一個.java文件中,有且只能有一個類帶有public關鍵字,比如上面的Test類。所以,從任意其他類中,我們都可以直接調用該類。Human類沒有關鍵字。更早之前,我們對象的成員也沒有關鍵字。這種沒有關鍵字的情況也代表了一種可見性,我將在包(package)的講解中深入。

 

4、總結

封裝,接口

private, public

到此這篇關于Java基礎 第四篇 封裝與接口的文章就介紹到這了,更多相關Java 的封裝與接口內容請搜索服務器之家以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持服務器之家!

原文鏈接:https://www.cnblogs.com/vamei/archive/2013/03/27/2982209.html

延伸 · 閱讀

精彩推薦
  • Java教程Java BufferWriter寫文件寫不進去或缺失數據的解決

    Java BufferWriter寫文件寫不進去或缺失數據的解決

    這篇文章主要介紹了Java BufferWriter寫文件寫不進去或缺失數據的解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望...

    spcoder14552021-10-18
  • Java教程Java實現搶紅包功能

    Java實現搶紅包功能

    這篇文章主要為大家詳細介紹了Java實現搶紅包功能,采用多線程模擬多人同時搶紅包,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙...

    littleschemer13532021-05-16
  • Java教程升級IDEA后Lombok不能使用的解決方法

    升級IDEA后Lombok不能使用的解決方法

    最近看到提示IDEA提示升級,尋思已經有好久沒有升過級了。升級完畢重啟之后,突然發現好多錯誤,本文就來介紹一下如何解決,感興趣的可以了解一下...

    程序猿DD9332021-10-08
  • Java教程Java使用SAX解析xml的示例

    Java使用SAX解析xml的示例

    這篇文章主要介紹了Java使用SAX解析xml的示例,幫助大家更好的理解和學習使用Java,感興趣的朋友可以了解下...

    大行者10067412021-08-30
  • Java教程Java8中Stream使用的一個注意事項

    Java8中Stream使用的一個注意事項

    最近在工作中發現了對于集合操作轉換的神器,java8新特性 stream,但在使用中遇到了一個非常重要的注意點,所以這篇文章主要給大家介紹了關于Java8中S...

    阿杜7482021-02-04
  • Java教程xml與Java對象的轉換詳解

    xml與Java對象的轉換詳解

    這篇文章主要介紹了xml與Java對象的轉換詳解的相關資料,需要的朋友可以參考下...

    Java教程網2942020-09-17
  • Java教程小米推送Java代碼

    小米推送Java代碼

    今天小編就為大家分享一篇關于小米推送Java代碼,小編覺得內容挺不錯的,現在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧...

    富貴穩中求8032021-07-12
  • Java教程20個非常實用的Java程序代碼片段

    20個非常實用的Java程序代碼片段

    這篇文章主要為大家分享了20個非常實用的Java程序片段,對java開發項目有所幫助,感興趣的小伙伴們可以參考一下 ...

    lijiao5352020-04-06
主站蜘蛛池模板: 欧美贵妇videos办公室 | 乌克兰粉嫩摘花第一次 | 国产精品怡红院永久免费 | 精品一区二区三区五区六区七区 | 国产乱子伦在线观看不卡 | 精品亚洲视频在线观看 | 秋霞在线观看成人高清视频51 | 国产一区在线播放 | 小便japanesewctv| 九九99在线视频 | 精品久久免费视频 | 国产成人精品一区二三区在线观看 | 久久伊人中文字幕有码 | 久久精麻豆亚洲AV国产品 | 亚洲图片综合区 | 欧美一级在线 | 色狠狠婷婷97 | 免费波多野结衣庭教师 | 日本手机在线 | 亚洲国产经典 | 久久re视频这里精品一本到99 | 亚洲AV国产精品无码精 | 久久精品男人影院 | 午夜国产福利视频一区 | 国模人体aⅴ | 小早川怜子在线播放精品 | 日韩欧美高清视频 | 九九热视频 这里有精品 | 欧美日韩国产在线人成 | 国产裸舞福利资源在线视频 | tubehdxx丝袜正片 | 久久综合给合久久狠狠狠… | 日韩在线视频二区 | 国产草逼视频 | 波多野结衣xxxx性精品 | 国产极品精频在线观看 | 99久久精品免费看国产 | 超91精品手机国产在线 | 国产主播99 | 欧美在线视频一区 | 国产99精品免费视频看6 |