Java之旅No.3:Java的封装


今天有个师弟跟我说了这句话,好感动,我会努力的( ̄▽ ̄)~*

一些想法

有人问我,我的公众号多久更新一次。目前为止自己还没找到一个属于自己的节奏去更新,现在主要是不太明确怎么去学哈。我还在不断的探索当中,也希望大神们能够给我提点建议,让我少走点弯路,谢谢啦!٩(๑❛ᴗ❛๑)۶

真不知道怎么起标题名

嗯,Java是一个面向对象的编程语言,在这门语言中,一切事物皆对象,所以今天来对Java的面向对象特性,它具有三大特性,分别是封装、继承和多态,今天来讲下继承。
参考课程:Java入门第二季(http://www.imooc.com/learn/124
参考书籍:《Java语言程序设计 基础篇》

先来看一个sample

恩恩,直接说概念多难啊,先来看一段代码吧ヾ(๑╹◡╹)ノ”答应我一段段的看哦。

public class Circle {
    double radius;//圆的半径
    /* 下列两个构造器:
     * 第一个无参的构造器实现构造一个radius等于1的Circle对象
     * 第二个有参的构造器实现构造一个用户自定义radius的Circle对象*/
    Circle(){
        radius = 1.0;
    }

    Circle(double newRadius){
        //if语句的简化表达形式,条件为真执行radius = newRadius 条件为假执行 radius = 0
        radius = (newRadius>=0) ?newRadius :0;
    }
    double getArea(){
        return radius*radius*Math.PI;
    }
}

嗯,这段代码很简单吧!但这段代码是不安全的,为啥呢。我们知道,圆的半径是大于0的,要是哪个傻逼来了一句new Circle().radius = -5 这就吓坏数学老师了。。。那么怎么防止这种情况发生呢?很简单↓↓↓↓↓↓

private double radius;

为了避免对成员变量的直接修改,应该使用private修饰符将成员声明为私有,这样,外部类就不能轻易修改该成员。这样的做法称为数据域封装(data field encapsulation)
那么,为了能够实现对radius的修改,我们可以通过如下方式↓↓↓↓↓↓

public void setRadius(double newArea){
    radius = (newArea>=0) ? newArea :0;
}

这样子,客户就可以通过调用setArea方法对radius进行修改,又可以防止radius被随意赋值负值的情况,厉害吧ヾ(o・ω・)ノ
引用书本的一句话↓↓↓↓↓↓

设计指南 为防止数据被篡改以及使类更加容易维护,最好将数据域声明为私有的。

类的封装

上述Circle类含有一个getArea方法,通过调用此方法我们能够获取该Circle的面积。作为类的使用者,我们并不需要去关心Circle的Area是如何被计算出来的,我们只需要通过.getArea()就能够或许area,实现的细节经过封装,对用户隐藏起来,这称为类的封装(class encapsulation)
 ̄へ ̄嗯,看不懂吗。就好比小明跟小红,小红呢数学比较差,她不知道怎么去求一个圆的面积,但小明知道。有一天,小红遇到一个r = 3的圆,她就去问小明,这个r = 3的圆的面积是多少,小明就会告诉她答案。这个过程中,小红直接就获取了她想要的答案,而具体这面积是怎么算的,这封装在了小明的脑子里,小红是看不到的!!!嗯,大概可以这样理解。。(ノ ̄▽ ̄)

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值