簡體   English   中英

Java 對象設置屬性默認值

[英]Java Object set attribute default

class AStudent {
    private String name;
    public int age;
    public void setName(String inName) {
        name = inName;
    }

    public String getName() {
        return name;
    }
}
public class TestStudent2 {
    public static void main(String s[]) {
        AStudent stud1 = new AStudent();
        AStudent stud2 = new AStudent();
        stud1.setName("Chan Tai Man");
        stud1.age = 19;
        stud2.setName("Ng Hing");
        stud2.age = -23;
        System.out.println("Student: name="+stud1.getName()+
                           ", age=" + stud1.age);
        System.out.println("Student: name="+stud2.getName()+
                           ", age=" + stud2.age);
    }
}

如何通過向age屬性添加數據封裝來增強類AStudent 如果輸入的age無效,我想打印錯誤信息並將年齡設置為18。

首先,修改age ,使其不公開。 然后添加訪問器和修改器方法(在修改器中,檢查無效值 - 並將其設置為 18)。 就像是,

private int age;
public int getAge() {
    return age;
}
public void setAge(int age) {
    if (age < 0) {
        System.err.println("Invalid age. Defaulting to 18");
        age = 18;
    }
    this.age = age;
}

然后你可以將它與setName東西一起使用

stud1.setAge(19);

stud2.setAge(-23);

您可以通過在AStudent覆蓋toString來使其更容易顯示,例如

@Override
public String toString() {
    return String.format("Student: name=%s, age=%d", name, age);
}

然后你可以打印你的AStudent實例,比如

System.out.println(stud1); // <-- implicitly calls stud1.toString()
System.out.println(stud2);

您正在對name屬性使用封裝。 你可以為年齡做同樣的事情。

class AStudent {
    // ...
    private int age;
    public void setAge(int age) {
        this.age = age;
        if (age < 1) {
            this.age = age;
        }
    }
}

上面的代碼將age屬性更改為private,以便訪問僅限於getter 和setter。 因此,您還必須添加一個 getter 方法並更改TestStudent2以使用新的 getter 和 setter。

什么使年齡無效? 上面的代碼假定任何小於 1 的值都是無效的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM