讨论关于封装性之public&private

时间:2021-07-21 20:30:47
代码1

public 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;
}


}

代码2

public class P {
public int age;
public  String name;

}

一、代码1和代码2哪个好?说明原因
二、代码1中注释的二行代码在该类中是否有必要?

我认为代码2更好,代码更简捷。但是好像打破了封装性!

16 个解决方案

#1


该回复于2009-07-18 00:11:58被版主删除

#2


引用 1 楼 chenxinhong98 的回复:
代码1,因为在很多框架(如spring、el表达式)中获取javabean时都有是调用的getter和setter而不是直接访问的字段.

如果不用框架,getter and setter 不是一种累赘吗?

#3


代码1好,这样封装数据更安全些。

#4


就算不使用框架,把字段给封装成属性页有一定的好处
eg: 你的age要求是20-30之间,如果采用办法2的话,别人直接给age一个0或者是负数也可以,
数据的合法性不能保证。
当然还有别的更多的好处,就不一一说了

#5


为了安全。应藏一些不能被别人修改或查看的信息

#6


用get和set方法获取属性还有一个很大的好处就是可以实现一些业务逻辑,比如一些工厂老板不想别人知道自己有未成年工人,当工人年龄为16岁时,用get方法取到得是18岁,代码如下:

public class P { 
private int age; 

public int getAge() {
if(age<18){
return 18; 

return age; 

public void setAge(int age) { 
this.age = age; 



#7


一、代码1和代码2哪个好?说明原因 
1好
封装性是面向对象技术最重要的特性之一

二、代码1中注释的二行代码在该类中是否有必要? 
没有什么必要,加了也没是实际意义(仅仅打印出这个name是null)
name还是被赋值的
一般过滤null值都是在set前做的

#8


getter and setter可以实现不良数据的过滤 并且万一今后你类属性的名字发生了变化可以不必去改动使用该类的所有地方

#9


代码1好,封装性好。如果出现字段不在你预想之中,调试更为方便。直接把断点设在setter和getter方法就可以了

#10


一、代码1和代码2哪个好?说明原因 
代码1更好点,代码1中的属性更安全,更符合面向对象的特性,
二、代码1中注释的二行代码在该类中是否有必要? 
要看具体情况,基本上可以不要,如果是简单的JAVABEAN的话,在调用之前,应该已经作过相关的验证处理了。

#11


代码1中注释部分没有意义,只是在后台打印一句话而已,并不能防止空指针异常,要防止空指针异常可以把注释部分改为:

public void setName(String name) { 
this.name = name==null ? "" : name;; 


#12


如果类只有属性,不需要方法,那么第二个也可以的。

只不过目前的框架都不支持而已。

#13


肯定是代码1了
类的设计必须要符合面向对象的特点,就是高内聚,低耦合。这样设计出的类才最标准。
类必须实现内部的一切对外部来说是透明的,只留出一些接口供外部调用,这样才安全。
采用setter,getter方法,会取得很好的效果,会防止一些错误的输入数据,如年龄输入为负值,可以在setter方法中
进行数据合法性的判断。
所以我们一开始就应该养成良好的设计习惯。

#14


代码1好,数据安全性更高,数据安全性在实际的项目开发过程中很重要

#15


只是对类P属性的进行读写操作(很多时候都是这样做的),不做什么安全性的检查。
属性写成public不是更简单吗。

关于封装性,可以把它的属性看作方法。(像ruby

#16


面向对象的思想要好好理解

#1


该回复于2009-07-18 00:11:58被版主删除

#2


引用 1 楼 chenxinhong98 的回复:
代码1,因为在很多框架(如spring、el表达式)中获取javabean时都有是调用的getter和setter而不是直接访问的字段.

如果不用框架,getter and setter 不是一种累赘吗?

#3


代码1好,这样封装数据更安全些。

#4


就算不使用框架,把字段给封装成属性页有一定的好处
eg: 你的age要求是20-30之间,如果采用办法2的话,别人直接给age一个0或者是负数也可以,
数据的合法性不能保证。
当然还有别的更多的好处,就不一一说了

#5


为了安全。应藏一些不能被别人修改或查看的信息

#6


用get和set方法获取属性还有一个很大的好处就是可以实现一些业务逻辑,比如一些工厂老板不想别人知道自己有未成年工人,当工人年龄为16岁时,用get方法取到得是18岁,代码如下:

public class P { 
private int age; 

public int getAge() {
if(age<18){
return 18; 

return age; 

public void setAge(int age) { 
this.age = age; 



#7


一、代码1和代码2哪个好?说明原因 
1好
封装性是面向对象技术最重要的特性之一

二、代码1中注释的二行代码在该类中是否有必要? 
没有什么必要,加了也没是实际意义(仅仅打印出这个name是null)
name还是被赋值的
一般过滤null值都是在set前做的

#8


getter and setter可以实现不良数据的过滤 并且万一今后你类属性的名字发生了变化可以不必去改动使用该类的所有地方

#9


代码1好,封装性好。如果出现字段不在你预想之中,调试更为方便。直接把断点设在setter和getter方法就可以了

#10


一、代码1和代码2哪个好?说明原因 
代码1更好点,代码1中的属性更安全,更符合面向对象的特性,
二、代码1中注释的二行代码在该类中是否有必要? 
要看具体情况,基本上可以不要,如果是简单的JAVABEAN的话,在调用之前,应该已经作过相关的验证处理了。

#11


代码1中注释部分没有意义,只是在后台打印一句话而已,并不能防止空指针异常,要防止空指针异常可以把注释部分改为:

public void setName(String name) { 
this.name = name==null ? "" : name;; 


#12


如果类只有属性,不需要方法,那么第二个也可以的。

只不过目前的框架都不支持而已。

#13


肯定是代码1了
类的设计必须要符合面向对象的特点,就是高内聚,低耦合。这样设计出的类才最标准。
类必须实现内部的一切对外部来说是透明的,只留出一些接口供外部调用,这样才安全。
采用setter,getter方法,会取得很好的效果,会防止一些错误的输入数据,如年龄输入为负值,可以在setter方法中
进行数据合法性的判断。
所以我们一开始就应该养成良好的设计习惯。

#14


代码1好,数据安全性更高,数据安全性在实际的项目开发过程中很重要

#15


只是对类P属性的进行读写操作(很多时候都是这样做的),不做什么安全性的检查。
属性写成public不是更简单吗。

关于封装性,可以把它的属性看作方法。(像ruby

#16


面向对象的思想要好好理解