为了账号安全,请及时绑定邮箱和手机立即绑定

setter也可以改变属性值,那为什么不直接改,而是用setter方法改呢?

封装是为了不让人们随便改变属性值,可是为什么还要用set方法去改变呢,这样不是和原来没有什么区别了么?这是为什么呢?

正在回答

4 回答

public class Demo{
    private int age;
    public void setAge(int age){
        this.age=age;
}
}

比如说这个Demo类,封装了一个age属性。

Demo d=new Demo();

不可以通过d.age访问


但是可以通过d.setAge方法进行修改值


面向对象的三大特征 就是封装 继承和多态

借用百科的解释

封装是把过程和数据包围起来,对数据的访问只能通过已定义的接口。面向对象计算始于这个基本概念,即现实世界可以被描绘成一系列完全自治、封装的对象,这些对象通过一个受保护的接口访问其他对象。封装是一种信息隐藏技术,在java中通过关键字private实现封装。什么是封装?封装把对象的所有组成部分组合在一起,封装定义程序如何引用对象的数据,封装实际上使用方法将类的数据隐藏起来,控制用户对类的修改和访问数据的程度。

已经对封装解释的很详细了,由于是私有的,不可以被继承。

① 对象的数据封装特性彻底消除了传统结构方法中数据与操作分离所带来的种种问题,提高了程序的可复用性和可维护性,降低了程序员保持数据与操作内容的负担。

②对象的数据封装特性还可以把对象的私有数据和公共数据分离开,保护了私有数据,减少了可能的模块间干扰,达到降低程序复杂性、提高可控性的目的。


0 回复 有任何疑惑可以回复我~
#1

beyondlxb 提问者

非常感谢!慕友实在太给力了。
2015-07-15 回复 有任何疑惑可以回复我~

getter和setter的作用,是对类内部数据的保护。如果能直接访问该类的属性,那么就存在属性不可控的情况,而用方法来修改数据,可以在方法中添加一些保护措施,这样就能保护属性值了。个人观点,仅供参考。

1 回复 有任何疑惑可以回复我~
  1. 间接操作变量,可以限制变量的使用条件,防止非法使用。

  2. 第二个之所以是setter和getter是javabean的一个规范,可读性好,你完全可以用setABC()都可以实现封装。

    比如:

public void setAge(int age)
{
  if(age>0 && age<100)
  {
  this.age = age;
  }
  else
  {
   //输入的年龄无效
  }
}


1 回复 有任何疑惑可以回复我~

age是个私有属性,要修改age的值只能通过setter去修改,如果要使用d.age的话,需要把age改成public的

1 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消

setter也可以改变属性值,那为什么不直接改,而是用setter方法改呢?

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信