Java 三大特性

前言

所谓Java三大特性就是我们耳熟能详的 封装,继承,多态,那么他们各有什么好处呢。

封装

封装通俗解释就是信息隐藏或者数据访问保护。Java类通过暴露有限的访问接口,授权外部仅能通过类提供的方式(或者叫函数)来访问内部信息或者数据。我们通过一个简单的例子来解释一下。

public class FoodCard {
    private Long cardId;
    private BigDecimal balance;
    private Long createTime;
    private Long recentUseTime;

    public FoodCard() {
        this.cardId = IdGenerator.getInstance().generate();
        this.createTime = System.currentTimeMillis();
        this.recentUseTime = System.currentTimeMillis();
        this.balance = BigDecimal.valueOf(0L);
    }

    public void addMoney( BigDecimal balance ) throws Exception {
        if(balance.compareTo(BigDecimal.valueOf(0L))<0){
            throw new Exception("amount error");
        }
        this.balance.add(balance);
        this.recentUseTime = System.currentTimeMillis();
    }

    public void use( BigDecimal balance ) throws Exception {

        if(balance.compareTo(BigDecimal.ZERO)<0){
            throw new Exception("amount error");
        }

        if(balance.compareTo(this.balance)>0){
            throw new Exception("amount error");
        }

        this.balance.subtract(balance);
        this.recentUseTime = System.currentTimeMillis();
    }
    public Long getCardId() {
        return cardId;
    }

    public BigDecimal getBalance() {
        return balance;
    }

    public Long getCreateTime() {
        return createTime;
    }
}

上面的饭卡类中,总共四个属性,分别是饭卡id,饭卡余额,饭卡创建时间,饭卡最近使用时间。 我们正是使用了封装的隐藏特性,将饭卡ID,创建时间,使用时间进行了隐藏。因为饭卡id和创建时间在创建之后就不能再改,所以没有暴漏这两个属性的setter方法。而金额和最近时间是绑定在一起的,金额只有充值和使用两种用途,所以这里只提供了这两个方法。
这样就保证了数据的安全性,在使用这个类的时候别人就只能使用提供的这几个方法。如果全部提供了setter方法,不熟悉类实现的人可能会直接setter了金额,或者setter了最近使用时间,甚至卡号等数据,出现对象的数据不一致等问题。

好处:

1、数据安全性,属性不能被随便修改。
2、易用性,使用这个类的人可以清晰的使用这个类。
***

原则:优雅的封装不能乱暴漏getter,setter方法。
继承

封装是基础,因为有了封装,为了实现代码的复用,所有就有了继承的属性。所谓继承就是子类拥有父类的非私有属性和方法。

好处:

1、提高代码复用
2、更切合实际生活容易理解。

坏处:

过度使用继承,继承层次过深过复杂,就会导致代码可读性、可维护性变差
修改父类会直接影响子类的功能,违反开闭原则

原则:多用组合少用继承
多态

对于多态,继承就是基础,继承满足了代码复用,为了同时具备扩展能力,所以有了多态属性。所谓多态就是在继承的基础上通过重写父类方法来实现扩展。

好处:

1、提高代码复用
2、实现能力扩展,是很多设计模式,接口,抽象类的基础。

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值