關於java類的封裝性的一點看法

觀察以下代碼:
package cr.tdtx.banjin.classtest;
class People {
    String name;// 表示人的姓名
    int age;    //表示人的年齡
    public void tell(){
        System.out.println("姓名:"+name+",年齡:"+age);
    }
    
}
public class ClassTest3{
    public static void main(String[] args){
        People p = new People();
        p.name = "張三";
        p.age = -30;
        p.tell();
    }
} 


   如果現在的年齡爲負數,並不會影響程序的執行,但是從實際的生活角度來講,沒有一個人的年齡是-30歲,所以這樣的數據就不應該設置上去。 
    因爲現在類中的所有操作都是對外部可見的,可以直接訪問的,此時就可以通過封裝性來解決此問題。在java中封裝有很多的體現,但是最簡單的體現就是加入“private”關鍵字。
封裝屬性:private 數據類型 屬性名稱 =  默認值;
封裝方法:private 返回值類型void 方法名稱(參數列表);
 下面按照此操作將類中的屬性進行封裝。
package cr.tdtx.banjin.classtest;
class People {
    private String name;// 表示人的姓名
    private int age;    //表示人的年齡
    public void tell(){
        System.out.println("姓名:"+name+",年齡:"+age);
    }
    
}
public class ClassTest3{
    public static void main(String[] args){
        People p = new People();
        p.name = "張三";
        p.age = -30;
        p.tell();
    }
} 


提示出錯:

    提示出錯,證明現在的屬性是安全的,可以自己保護了。但是,卻無法進行操作了。

    此時給了一個重要的概念:只要屬性就必須封裝,被封裝的屬性通過setter及getter方法設置和取得,例如:name屬性,setter:setName(),getter:getName()

package cr.tdtx.banjin.classtest;
class People {
    private String name;// 表示人的姓名
    private int age;    //表示人的年齡
    public void tell(){
        System.out.println("姓名:"+name+",年齡:"+age);
    }
    public void setName(String n){
        name = n;
    }
    public void setAge(int a){
        age =a;
    }
    public String getName(){
        return name;
    }
    public int getAge(){
        return age;
    }
}
public class ClassTest3{
    public static void main(String[] args){
        People p = new People();
        p.setName("張三");
        p.setAge(-30);
        p.tell();
    }
} 



此時,已經可以訪問類中的name和age屬性,是通過間接的方式完成,但是此時並沒有對輸入的內容進行檢查。就要在setAge裏面加入限制條件
public void setAge(int a){
        if(a>=0&&a<200){
            age =a;    
        }
    } 



在訪問本類中其他方法的時候,爲了保證此方法是本類中定義的,可以在方法前加上this關鍵字:
this.方法()-->調用本類方法
package cr.tdtx.banjin.classtest;
class People {
    private String name;// 表示人的姓名
    private int age;    //表示人的年齡
    public void tell(){
        System.out.println("姓名:"+this.getName()+",年齡:"+this.getAge());
    }
    public void setName(String n){
        name = n;
    }
    public void setAge(int a){
        if(a>=0&&a<200){
            age =a;    
        }
    }
    public String getName(){
        return name;
    }
    public int getAge(){
        return age;
    }
}
public class ClassTest3{
    public static void main(String[] args){
        People p = new People();
        p.setName("張三");
        p.setAge(-30);
        p.tell();
    }
}


發佈了14 篇原創文章 · 獲贊 4 · 訪問量 5萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章