请教一个变量作用域的问题

999朵玫瑰 2009-11-25 09:18:50
类A的属性aa设置为public
public class A{
public int aa;
}

类B的属性bb设置为private
public class B{
private int bb;
public int getBb(){
return bb;
}
public void setBb(num){
this.bb = num;
}
}

客户端修改类A的新实例的属性时:
A myA = new A();
myA.aa = 22;

客户端修改类B的新实例的属性时:
B myB = new B();
myB.setBb(33);

感觉客户端对类A和B变量操作权限效果是一样的阿,那区别在哪呢
...全文
217 8 打赏 收藏 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
dangelrose 2009-11-25
  • 打赏
  • 举报
回复
要深刻理解OOP的思想~
其中重要的思想之一就是encapsulation~封装

通俗的说就是隐藏!!

A的弊病:
1.你现在A类的属性完全暴露~~不安全!
2.你要对赋值语句进行更加详细的封装的话和困难~
3。后期不好维护!
苍蝇①号 2009-11-25
  • 打赏
  • 举报
回复
这得从面向对象的封装性的好处入手
四十三号 2009-11-25
  • 打赏
  • 举报
回复
假设你两个类里的aa和bb,都是表示一个人的年龄。如果使用A类,有可能会给aa赋负值,或者超出正常的数值。
但是如果是B类,你可以在方法里做个处理,最好setXxx()方法能返回个布尔值

public boolean setBb(num){
if(num < 0 || num > 150){
return false;
}
this.bb = num;
return true;
}
lidongzhuo21 2009-11-25
  • 打赏
  • 举报
回复
如果get set方法全有的话就是一样的。。。但是有的时候程序员不想让客户端修改这个域时、或者只允许客户端设值而不允许得到值时、或者根本不让修改和获取时。就不提供get set方法,或只提供其中之一,就不一样了。
bawgiitx 2009-11-25
  • 打赏
  • 举报
回复

public class B{//这样的话不一样了吧
private int bb;//bb作当前操作数组的下标
private int[] cc;
public int getBb(){
return bb;
}
public void setBb(num){
this.bb = num;
if(bb<0)bb=0;
}
}
GreenVesture 2009-11-25
  • 打赏
  • 举报
回复
你这个例子,效果是一样的,但是方式不一样:
一个是直接访问类成员,myA.aa = 22;
一个是间接访问,myB.setBb(33);私有成员只能间接访问...
Dan1980 2009-11-25
  • 打赏
  • 举报
回复
这个问题和“变量作用域”有关系吗?
liugxb 2009-11-25
  • 打赏
  • 举报
回复
完全同意6楼的意见。

62,620

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧