四、面向对象(二)Java封装

今天的博客主题

      基础篇 --》面向对象 --》Java封装


Java封装

在面向对象程序设计方法中,封装是指一种将抽象性函式接口的实现细节部份包装、隐藏起来的方法。

封装可以被认为是一个保护屏障,防止该类的代码和数据被外部类定义的代码随机访问。

要访问该类的代码和数据,必须通过严格的接口控制。

封装最主要的功能在于我们能修改自己的实现代码,而不用修改那些调用我们代码的程序片段。

适当的封装可以让程式码更容易理解与维护,也加强了程序代码的安全性。

类、方法其实也是封装的体现。

 

封装的优点

1. 良好的封装能够减少耦合。

2. 类内部的结构可以自由修改。

3. 可以对成员变量进行更精确的控制。

4. 隐藏信息,实现细节。

 

什么是封装呢?

封装就是将类中的属性私有化,提供一个公共方法来访问这些私有属性。

 

为什么封装呢?

封装可以实现对属性的数据访问限制,增加程序的安全性。

 

如何实现封装?

  1. 将类中的属性私有化,通过关键字private实现
  2. 为每个属性提供赋值(setter)和取值(getter)方法
  3. 在赋值和取值当中,增加对属性的存取限制。

例:

 

public class Person {
    private String name;
    private String sex;
    private int age;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getSex() {
        return sex;
    }

    public void setSex(String sex) {
        this.sex = sex;
    }

    public int getAge() {
        return age;
    }

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

这样就完全实现了一个封装。

这是一个Person类,当被实例化之后就是一个对象,一个实实在在存的是实体,那这个类也叫实体类

为什么将属性设置成私有化,而不直接设置成公有的?

举例说明:

银行大家都去过哈,银行是不是有金库仓库用来放钱,那这个仓库就可以看做是类中的属性,如果设为公共的,好嘛,你来放1000,他来放1000,谁知道你俩放的钱是真的还是假的,是钱还是纸,这就是设置成公有的危害,在程序上讲,这些都是不安全的。有解决方案了,这个仓库我设置成私有的,开设银行大厅窗口,对外公共访问,好你来存钱了,经过一个窗口,来验证你存的钱真假。好这样是不是问题就解决了。在程序里面,将属性设为私有的,为每个属性提供赋值(setter)和取值(getter)方法,供外界访问,这样一来,你赋值还是取值都能如我所愿,自己控制了。引用到程序当中这种好处很多,如果设置成共有的,你有十个地方用到整个类,有点逻辑变动,那你这十个地方都得改,如果有100个,1000个呢个?疯狂吗?如果是私有的,提供一个对外访问的,那你只需要在这一个地方改一下就好了,你就能控制所有的了

如果真设置成公有的该怎么使用呢?

例:

 

// Psrson类
public class Person {   
    public String name;
    public String sex;
    public int age;
}
// TestDemo类,测试
public class TestDemo {
    public static void main(String[] args) {
        //创建对象
        Person person = new Person();
        person.name = "zs";
        person.sex = "男";
        person.age = 21;
        System.out.println("姓名:" + person.name + " 性别:" + person.sex + " 年龄:" + person.age);
    }
}
输出结果:姓名:zs 性别:男 年龄:21

这样一个地方用了,有变动还好改,拿要是多个地方呢?

看下设置成私有的,怎么样使用。

例:

public class TestDemo {
    public static void main(String[] args) {
        //创建对象
        Person person = new Person();
        person.setName("ls");
        person.setSex("女");
        person.setAge(11);
        System.out.println("姓名:" + person.getName() + " 性别:" + person.getSex() + " 年龄:" + person.getAge());
    }
}

就直接使用set、get就好了。

刚才一直说有变动,哪里变动呢?有一天发现设计不合理,需要把int类型的age改成String类型的。

现在代码已经被很多地方引用了,如果是公有的,那就得把所有person.age = xx;全部改成person.age = "xxx";

如果当初设置成了私有的只需要把Person类里 private int age;改成 private String age;

public void setAge(int age) {

    this.age = age;

}

改成

public void setAge(int age) {

    this.age = String.valueOf(age);

}

这样就可以了,是不是省很多事。这就是说的封装的优点第二条:类内部结构可以自由更改。

设成公有的话,设置年龄的时候,难免会写错,如果写成了 person.age = 2000;哪有人能活这么长时间,

这样的话你能控制码,你控制不了。

如果是私有的就好办了,只需要在setAge方法里加上判断就可以了。

public void setAge(int age) {

if(age > 120){

System.out.println("ERROR:你输入的年龄不合法");

}else{

this.age = String.valueOf(age);

}

}

那这个问题就说了封装的优点第三条:可以对成员变量进行精确的控制。

一般程序设计当中很少在set get方法中加载业务逻辑,增加排查错误的难度。

 

那第四条隐藏信息,实现细节怎么说呢?

在刚才Person类里增加 :

 

private double money;
public void setMoney(double money) {    
    this.money = money;
}

一个人有钱,有多少钱,我不让你知道,那就不需要提供get方法了。这就隐藏信息了,也可以在set钱的时候,我可以做一些细节处理。

这只是一方面,在代码当中的封装更多的是将一些公用的方法进行抽取封装,也拿银行那个例子来说,

你存钱,就得有取,存钱也有利息对吧,每个人存钱金额不同,最后得到的利息也不同,这时候就有一个公共方法,来计算利息,你只需要把你的金额钱数

当个参数传递过去,具体的细节不用管,只需要关注最后返回给你的利息数就可以了。

如果这时候不抽出公共方法进行封装一下,利率变了,你每个计算利息的地方都得改,可想而知,工作量巨大,如果抽出了公共方法,那么你只需要改一下这个公共方法就可以了。


多动手,多思考

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值