1. 程式人生 > >java提高篇(一)-----理解java的三大特性之封裝

java提高篇(一)-----理解java的三大特性之封裝

      從大二接觸java開始,到現在也差不多三個年頭了。從最基礎的HTML、CSS到最後的SSH自己都是一步一個腳印走出來的,其中開心過、失落過、寂寞過。雖然是半道出家但是經過自己的努力也算是完成了“學業”。期間參加過培訓機構,但是極其不喜歡那種培訓方式,於是毅然的放棄了選擇自學(可憐我出了6000塊錢啊),雖然自學途中苦很多,但是樂更多,當中的付出和收穫只有自己知道。黃天不負有心人,鄙人愚鈍,在大四第一學期終於自學完成java(其中走了彎路,荒廢半年),並且憑藉它得到了一份不錯的工作,不勝感激!

      閒話過多!進入正題,LZ最近剛剛看完設計模式,感觸良多。而且在工作過程中深感java基礎不夠紮實,例如IO不熟、垃圾回收不知所云、多型七竅通五竅、反射不知、甚至連最基本的三大特性都搞得我迷糊了!所以我發狠心一定要好好彌補java基礎!從第一課開始---封裝!!!!!!

三大特性之---封裝

      封裝從字面上來理解就是包裝的意思,專業點就是資訊隱藏,是指利用抽象資料型別將資料和基於資料的操作封裝在一起,使其構成一個不可分割的獨立實體,資料被保護在抽象資料型別的內部,儘可能地隱藏內部的細節,只保留一些對外介面使之與外部發生聯絡。系統的其他物件只能通過包裹在資料外面的已經授權的操作來與這個封裝的物件進行交流和互動。也就是說使用者是無需知道物件內部的細節(當然也無從知道),但可以通過該物件對外的提供的介面來訪問該物件。

      對於封裝而言,一個物件它所封裝的是自己的屬性和方法,所以它是不需要依賴其他物件就可以完成自己的操作。

      使用封裝有三大好處:

         1、良好的封裝能夠減少耦合。

         2、類內部的結構可以自由修改。

         3、可以對成員進行更精確的控制。

         4、隱藏資訊,實現細節。

      首先我們先來看兩個類:Husband.java、Wife.java

public class Husband {
    
    /*
     * 對屬性的封裝
     * 一個人的姓名、性別、年齡、妻子都是這個人的私有屬性
     */
    private String name ;
    private String sex ;
    private
int age ; private Wife wife; /* * setter()、getter()是該物件對外開發的介面 */ public String getName() { return name; } public void setName(String name) { this.name = name; } public String getSex() { return sex; } public void setSex(String sex) { this.sex = sex; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public void setWife(Wife wife) { this.wife = wife; } }
public class Wife {
    private String name;
    private int age;
    private String sex;
    private Husband husband;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getSex() {
        return sex;
    }

    public void setSex(String sex) {
        this.sex = sex;
    }

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

    public void setHusband(Husband husband) {
        this.husband = husband;
    }

    public Husband getHusband() {
        return husband;
    }
    
}

       從上面兩個例項我們可以看出Husband裡面wife引用是沒有getter()的,同時wife的age也是沒有getter()方法的。至於理由我想各位都懂的,男人嘛深屋藏嬌妻嘛,沒有那個女人願意別人知道她的年齡。

      所以封裝把一個物件的屬性私有化,同時提供一些可以被外界訪問的屬性的方法,如果不想被外界方法,我們大可不必提供方法給外界訪問。但是如果一個類沒有提供給外界訪問的方法,那麼這個類也沒有什麼意義了。比如我們將一個房子看做是一個物件,裡面的漂亮的裝飾,如沙發、電視劇、空調、茶桌等等都是該房子的私有屬性,但是如果我們沒有那些牆遮擋,是不是別人就會一覽無餘呢?沒有一點兒隱私!就是存在那個遮擋的牆,我們既能夠有自己的隱私而且我們可以隨意的更改裡面的擺設而不會影響到其他的。但是如果沒有門窗,一個包裹的嚴嚴實實的黑盒子,又有什麼存在的意義呢?所以通過門窗別人也能夠看到裡面的風景。所以說門窗就是房子物件留給外界訪問的介面。

      通過這個我們還不能真正體會封裝的好處。現在我們從程式的角度來分析封裝帶來的好處。如果我們不使用封裝,那麼該物件就沒有setter()和getter(),那麼Husband類應該這樣寫:

public class Husband {
    public String name ;
    public String sex ;
    public int age ;
    public Wife wife;
}

     我們應該這樣來使用它:

Husband husband = new Husband();
        husband.age = 30;
        husband.name = "張三";
        husband.sex = "男";    //貌似有點兒多餘

      但是那天如果我們需要修改Husband,例如將age修改為String型別的呢?你只有一處使用了這個類還好,如果你有幾十個甚至上百個這樣地方,你是不是要改到崩潰。如果使用了封裝,我們完全可以不需要做任何修改,只需要稍微改變下Husband類的setAge()方法即可。

public class Husband {
    
    /*
     * 對屬性的封裝
     * 一個人的姓名、性別、年齡、妻子都是這個人的私有屬性
     */
    private String name ;
    private String sex ;
    private String age ;    /* 改成 String型別的*/
    private Wife wife;
    
    public String getAge() {
        return age;
    }
    
    public void setAge(int age) {
        //轉換即可
        this.age = String.valueOf(age);
    }
    
    /** 省略其他屬性的setter、getter **/
    
}

      其他的地方依然那樣引用(husband.setAge(22))保持不變。

      到了這裡我們確實可以看出,封裝確實可以使我們容易地修改類的內部實現,而無需修改使用了該類的客戶程式碼

      我們在看這個好處:可以對成員變數進行更精確的控制。

      還是那個Husband,一般來說我們在引用這個物件的時候是不容易出錯的,但是有時你迷糊了,寫成了這樣:

Husband husband = new Husband();
        husband.age = 300;

      也許你是因為粗心寫成了,你發現了還好,如果沒有發現那就麻煩大了,逼近誰見過300歲的老妖怪啊!

      但是使用封裝我們就可以避免這個問題,我們對age的訪問入口做一些控制(setter)如:

public class Husband {
    
    /*
     * 對屬性的封裝
     * 一個人的姓名、性別、年齡、妻子都是這個人的私有屬性
     */
    private String name ;
    private String sex ;
    private int age ;    /* 改成 String型別的*/
    private Wife wife;

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        if(age > 120){
            System.out.println("ERROR:error age input....");    //提示錯誤資訊
        }else{
            this.age = age;
        }
        
    }
    
    /** 省略其他屬性的setter、getter **/
    
}

      上面都是對setter方法的控制,其實通過使用封裝我們也能夠對物件的出口做出很好的控制。例如性別我們在資料庫中一般都是已1、0方式來儲存的,但是在前臺我們又不能展示1、0,這裡我們只需要在getter()方法裡面做一些轉換即可。

public String getSexName() {
        if("0".equals(sex)){
            sexName = "女";
        }
        else if("1".equals(sex)){
            sexName = "男";
        }
        else{
            sexName = "人妖???";
        }
        return sexName;
    }

      在使用的時候我們只需要使用sexName即可實現正確的性別顯示。同理也可以用於針對不同的狀態做出不同的操作。

public String getCzHTML(){
        if("1".equals(zt)){
            czHTML = "<a href='javascript:void(0)' onclick='qy("+id+")'>啟用</a>";
        }
        else{
            czHTML = "<a href='javascript:void(0)' onclick='jy("+id+")'>禁用</a>";
        }
        return czHTML;
    }

      鄙人才疏學淺,只能領悟這麼多了,如果文中有錯誤之處,望指正,鄙人不勝感激!

吐槽

      宅了三天今天就出去走走,在公交車上遇到一極品美女!我坐著,一美女上車,站在我旁邊,開始還好,過了一會兒她就對我笑,笑笑還好,但是你也不能總對著人家笑吧!笑的我都不好意了(鄙人臉皮薄,容易害羞??)。難道是我沒有洗臉?照照鏡子蠻幹淨的啊!難道是我衣服又或者褲子沒**,看來衣服褲子蠻好的!難道是我帥,對我有意思?(程式設計師屌絲一枚,貌似沒可能)!實在受不了了,哥想惹不起我還躲不起麼?哥下車!我一下車,那枚美女就飛速的佔我座位!哥當時就憋出一個字:靠!!!!!!!!

相關推薦

轉:java提高()-----理解java三大特性封裝

nss 一般來說 隱藏 source 沒有 實例 十個 影響 角度 轉 CSDN https://blog.csdn.net/chenssy/article/details/12757911?utm_source=blogxgwz0 從大二接觸java開始,到現在也差

java提高()-----理解java三大特性封裝

      從大二接觸java開始,到現在也差不多三個年頭了。從最基礎的HTML、CSS到最後的SSH自己都是一步一個腳印走出來的,其中開心過、失落過、寂寞過。雖然是半道出家但是經過自己的努力也算是完成了“學業”。期間參加過培訓機構,但是極其不喜歡那種培訓方式,於是毅然的放棄了選擇自學(可憐我出了6000塊錢

【轉】java提高(二)-----理解java三大特性繼承

logs 了解 向上轉型 one 調用 adding nbsp eight 基礎 【轉】java提高篇(二)-----理解java的三大特性之繼承 原文地址:http://www.cnblogs.com/chenssy/p/3354884.html 在《Thi

java提高(四)-----理解java三大特性多型 --- 轉載至http://www.cnblogs.com/chenssy/p/3372798.html

java提高篇(四)-----理解java的三大特性之多型       面向物件程式設計有三大特性:封裝、繼承、多型。  &n

java提高(二)-----理解java三大特性繼承

      在《Think in java》中有這樣一句話:複用程式碼是Java眾多引人注目的功能之一。但要想成為極具革命性的語言,僅僅能夠複製程式碼並對加以改變是不夠的,它還必須能夠做更多的事情。在這句話中最引人注目的是“複用程式碼”,儘可能的複用程式碼使我們程式設計師一直在追求的,現在我來介紹一種複用程式

轉:java提高(四)-----理解java三大特性多態

優先級 這一 否則 封裝 https 繼續 aid 類方法 void 作者: chenssy 出處: http://www.cnblogs.com/chenssy/ 本文版權歸作者和博客園共有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原

java面向對象三大特性封裝

javase封裝 其實以前一直在做Java開發的過程中或者剛開始初學的時候沒有想那麽多,都是單純的一直去做,但是自從做了某個項目之後也慢慢發現很多時候,人的精力和腦力是有限的,總是會忘記以前做過或者學過的東西,慢慢就開始了寫博客的習慣,一是可以自己加強一下,二是可以分享給別人可以和大家一起討論一下,因為每個人

Java三大特性封裝

轉載請標明出處: http://blog.csdn.net/wu_wxc/article/details/51463610 本文出自【吳孝城的CSDN部落格】 封裝是將類的某些資訊和例項細節之類的隱藏在類的內部,方便修改和實現,只允許該類提供的方法進行訪問,如set,

JAVA三大特性 封裝

我們日常使用的電腦主機,把cpu、記憶體、主機板等等都封裝到機箱裡面去。假如沒有機箱的話的出現什麼問題,主機、主機板全部都散落在一處,然後開機沒有開機按鈕,那麼需要我們直接操作接跳線才能把電腦開啟。這樣子的話假如操作不慎的話,會讓機器損壞危險,那麼假如用機箱封裝起來的話,那麼就不需要這樣子做了。

java提高-----詳解java的四捨五入與保留位

      四捨五入是我們小學的數學問題,這個問題對於我們程式猿來說就類似於1到10的加減乘除那麼簡單了。在講解之間我們先看如下一個經典的案例: public static void main(St

C++ 三大特性封裝

title prot 派生 情況 table tle 依賴 rtu 純虛函數 C++ 三大特性之封裝 本篇博客主要介紹C++ 的封裝機制。在本篇博客中,簡單介紹了封裝的相關概念以及在C++ 中實現封裝的基本手段。 什麽是封裝? 封裝: 封裝可以隱藏實現細節,使得代碼模塊化

PHP學習筆記--面向對象的三大特性封裝

查看 php學習 HP 是否 方法 成員 學習筆記 設置 獲取 封裝性: 面向對象的三大特性之一 * * 1. 就是把對象的成員(屬性,方法)結合成一個獨立的相同單位,並盡可能隱藏對象的內部細節 * * public protected * *

面向對象的三大特性封裝

pro prot 特性 sel 面向對象 私有 內部使用 訪問 turn # 面向對象的三大特性之封裝 # 第一個層面的封裝:類就是麻袋,這本身就是一種封裝 # 第二個層面的封裝:類中定義私有的,只在類內部使用,外部無法訪問 # 約定一:任何以單下劃線開頭的名字都應該是

python的三大特性封裝

封裝 隱藏物件的某些屬性和實現的細節,僅僅只對外提供公共訪問的方式。將函式和屬性裝到了一個非全域性的名稱空間。 封裝的好處 (1)將變化隔離 (2)便於使用 (3)提高複用性 (4)提高安全性 封裝原則 (1)將不需要對外提供的內容全部都隱藏起來 (2)吧屬性

day24 面向物件三大特性封裝

本週內容 組合 封裝 多型 面向物件高階 異常處理 網路協議 通訊原理 網際網路協議 TCP/UDP 基於TCP協議的套接字 上週回顧 1.xml,os,os.path 2.ATM+購物車 三層結構 3.面向物件與面向過程程式設計的對比 今日內容 1.面向物件

面向物件之類的三大特性封裝

封裝:就是將每個物件的資料(屬性)和操作(行為)包裝在一個類中。一般屬性定義為私有,方法定義為共有。屬性,只有內部的方法可以訪問私有的屬性,方法設定 為共有,外部可以訪問。示例:     public class Student {private String name;pr

Objective-C基礎學習筆記(三)-面向物件的三大特性封裝

面向物件的三大特性:封裝(成員變數)、繼承、多型; 一、 封裝 1. 封裝的理解:     在開發過程中,考慮到安全性要求,我們通常不讓外界直接修改我們類的成員變數,而讓外界使用我們提供的方法來修改,這樣類 的成員變數就           封裝起來了。 2. 封裝的目的就

黑馬程式設計師————OC面向物件_三大特性封裝

#import <Foundation/Foundation.h> @interface Car : NSObject @end @implementation Car // 物件方法 - (void)test { NSLog(@"111"); // 類方法呼叫

Java提高理解java三大特性——多態

調用 logs child fun 同時 不存在 .cn 暴露 並且 面向對象編程有三大特性:封裝、繼承、多態。 封裝隱藏了類的內部實現機制,可以在不影響使用的情況下改變類的內部結構,同時也保護了數據。對外界而已它的內部細節是隱藏的,暴露給外界的只是它的訪問方法。 繼承是為

Java提高理解java三大特性——多型

面向物件程式設計有三大特性:封裝、繼承、多型。 封裝隱藏了類的內部實現機制,可以在不影響使用的情況下改變類的內部結構,同時也保護了資料。對外界而已它的內部細節是隱藏的,暴露給外界的只是它的訪問方法。 繼承是為了重用父類程式碼。兩個類若存在IS-A的關係就可以使用繼承。,同時繼承也為實現多型做了鋪墊。那麼什