Java核心基础-理解封装

Java面向对象的3个基本特征:封装,继承和多态

什么是封装?

也称数据隐藏,从形式上看,封装就是将数据和行为组合在一个包中,并对对象的使用者隐藏具体的实现方式,即给对象赋予“黑盒”特性。

关键在于,绝对不能让类中的方法直接访问到其他类的实例字段。程序只能通过对象的方法与对象数据进行交互。

在Java中实现封装的做法是:

  1. 使用private修饰实例字段
  2. 对外提供get和set方法访问private实例字段

封装能带来什么好处?

“高内聚,低耦合”是程序设计中很重要的基本原则,封装就很好地体现出了这个原则。

  1. 让程序更加“面向对象”:因为只能通过对象的get和set方法才能访问和修改数据,没有对象就无法做到
  2. 提升程序的安全性/可靠性:只有通过set方法才能修改数据,我们可以在set方法中加上必要的判断,例如年龄不能小于0,避免数据被恶意篡改
  3. 提升程序的重用性:想象一下,加入实例字段是public的,我们使用user.age就可以访问和修改age字段,那么如果我们想为age加一个if判断条件,就要在每一处user.age都加上if语句,如果我们有1000个位置使用呢?这时候就体现出通过set方法修改age的好处了:只需在set方法里加上一个if语句即可。

设计get方法的注意点

不要返回可变对象引用,如果一定需要,首先应该对它进行克隆

例如:

错误用法

class Emp{
    private Date hireDay;
	...
    public Date getHireDay(){
        return hireDay;
    }
}

Date对象是可变的,通过get方法拿到hireDay的引用后,在外部就可以修改,而不需要通过set方法,这一点就破坏了封装性!

正确用法

class Emp{
    private Date hireDay;
	...
    public Date getHireDay(){
        return (Date)hireDay.clone();
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值