代码1public class P {
private int age;
private String name;
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
// if (name==null)
// System.out.println("name can't be null");
this.name = name;
}
}代码2public class P {
public int age;
public String name;}一、代码1和代码2哪个好?说明原因
二、代码1中注释的二行代码在该类中是否有必要?我认为代码2更好,代码更简捷。但是好像打破了封装性!
private int age;
private String name;
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
// if (name==null)
// System.out.println("name can't be null");
this.name = name;
}
}代码2public class P {
public int age;
public String name;}一、代码1和代码2哪个好?说明原因
二、代码1中注释的二行代码在该类中是否有必要?我认为代码2更好,代码更简捷。但是好像打破了封装性!
eg: 你的age要求是20-30之间,如果采用办法2的话,别人直接给age一个0或者是负数也可以,
数据的合法性不能保证。
当然还有别的更多的好处,就不一一说了
private int age; public int getAge() {
if(age<18){
return 18;
}
return age;
}
public void setAge(int age) {
this.age = age;
} }
1好
封装性是面向对象技术最重要的特性之一二、代码1中注释的二行代码在该类中是否有必要?
没有什么必要,加了也没是实际意义(仅仅打印出这个name是null)
name还是被赋值的
一般过滤null值都是在set前做的
代码1更好点,代码1中的属性更安全,更符合面向对象的特性,
二、代码1中注释的二行代码在该类中是否有必要?
要看具体情况,基本上可以不要,如果是简单的JAVABEAN的话,在调用之前,应该已经作过相关的验证处理了。
this.name = name==null ? "" : name;;
}
类的设计必须要符合面向对象的特点,就是高内聚,低耦合。这样设计出的类才最标准。
类必须实现内部的一切对外部来说是透明的,只留出一些接口供外部调用,这样才安全。
采用setter,getter方法,会取得很好的效果,会防止一些错误的输入数据,如年龄输入为负值,可以在setter方法中
进行数据合法性的判断。
所以我们一开始就应该养成良好的设计习惯。
属性写成public不是更简单吗。关于封装性,可以把它的属性看作方法。(像ruby