Java封裝性

封裝的基礎(chǔ)實(shí)現(xiàn)

在Java中所有面向?qū)ο蟮母拍疃际且灶惻c對象的關(guān)系為主的,那么首先我們通過一個(gè)例子解釋為什么需要提供封裝性

觀察如下代碼:

class Person{
    String name;
    int age;
    public void tell(){
        System.out.println("姓名:"+name+",年齡:"+age);
    }
}

public class MyClass {
    public static void main(String[] args){
       Person person = new Person();
       person.name = "張三";
       person.age = -30;
       person.tell();
    }
}
  • 運(yùn)行結(jié)果:姓名:張三,年齡:-30
  • 此時(shí)的代碼沒有語法錯(cuò)誤,但是從現(xiàn)實(shí)的角度來講,這個(gè)代碼是有錯(cuò)誤的且問題嚴(yán)重(年齡:-30)。這樣的錯(cuò)誤嚴(yán)格來講屬于業(yè)務(wù)錯(cuò)誤
  • 錯(cuò)誤原因在于當(dāng)前類的屬性可以直接被類外部的對象調(diào)用,所以此時(shí)我們認(rèn)為這樣的操作是屬于不安全的操作。因此需要解決的問題是將內(nèi)部的屬性保護(hù)起來,即:不讓外部直接操作,為此在Java中提供了private關(guān)鍵字,利用此關(guān)鍵字可以實(shí)現(xiàn)封裝

封裝性代碼如下:

class Person{
    private String name;
    private int age;
    public void tell(){
        System.out.println("姓名:"+name+",年齡:"+age);
    }
}

加入private之后,就表示此時(shí)name和age兩個(gè)屬性只能夠被Person訪問

  • 現(xiàn)在發(fā)現(xiàn),使用了private定義的屬性,類的外部不能夠直接訪問,所以安全性是最高的
  • 如果現(xiàn)在需要通過對象操作類中的屬性,在Java中就有了一個(gè)明確的要求:可以使用setter、getter方法取得封裝性內(nèi)容,以private String name;為例:
    設(shè)置數(shù)據(jù)public void setName(String n);
    取得數(shù)據(jù)public String getName();

使得外部可以訪問:

class Person{
    private String name;
    private int age;
    public void tell(){
        System.out.println("姓名:"+name+",年齡:"+age);
    }
    public void setName(String n){
        name = n;
    }
    public String getName(){
        return name;
    }
    public void setAge(int n){
        if (age >0 && age < 200){
            age = n;
        }
    }
    public int getAge(){
        return age;
    }
}

public class MyClass {
    public static void main(String[] args){
       Person person = new Person();
       person.setName("張三");
       person.setAge(30);
       person.tell();
    }
}

此時(shí)經(jīng)過封裝后,外界訪問屬性需設(shè)置符合現(xiàn)實(shí)規(guī)律的值才可以顯示(0<age<200),否則無法得到想要的結(jié)果

\color{red}{開發(fā)原則}:只要是類中的屬性應(yīng)使用private封裝,封裝后的屬性必須嚴(yán)格按照要求編寫setter、getter方法

總結(jié):

  • private聲明的屬性只能夠被類的內(nèi)部所訪問
  • private聲明的屬性必須有對應(yīng)的setter、getter方法,而且方法名稱要求按照嚴(yán)格標(biāo)準(zhǔn)編寫
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容