繁体   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