面向对象三大特性01-封装详解

1. 封装(属性私有,get/set)

代码示例: 

如上图Student类中,id属于私有属性,也就是不供外界调用.也就是属性前面加了关键字private,显然是会报错。

1.1 什么是封装?

  •  该露的露,该藏的藏。设计程序讲究“高内聚,低耦合”, 高内聚就是类的内部数据操作细节自己完成,不允许外部干涉,低耦合:仅仅暴露少量的方法给外部使用。
  • 封装,实际上可以理解为数据的隐藏。通常情况下,应该禁止直接访问一个对象中数据的实际表示,而应该通过操作接口来进行访问,也就是所谓的信息隐藏。

1.2 为什么要封装?也就是等同于封装之后有啥好处呢?

代码示例:

如何通过公开的方法(也就是提供的接口方法)来对私有的属性进行调用?

package oop.Demon04;
//类 private 私有
public class Student {
    //属性私有
    private String name; //名字
    private int id;  //id
    private char gender; //性别
    //提供一些可以操作这个属性的方法
    //提供一些public的get set 方法
    //get 获取这个数据
    public String getName() {
        return this.name;
    }
    //set  给这个数据设置相应的值
    public void setName(String name) {
        this.name = name;
    }
}

 通过上面的代码,很显然能够看出通过公开的get/set接口方法,实现了对私有属性的访问。同时又没有暴露具体的细节。也就是你只管调用就行了,至于类里面的具体的代码实现,你是不知道的,只不过上面都是基于上帝视角而已。

==================================================================

        当然,如何一键快速生成get/set方法呢?

*********idea快捷键:alt+insert  经常会使用。

public int getId() {
        return id;
    }
public void setId(int id) {
        this.id = id;
    }

public char getGender() {
        return gender;
    }
public void setGender(char gender) {
        this.gender = gender;
    }

        ===========================================================

代码示例:

ackage oop.Demon04;
//类 private 私有
public class Student {
    //属性私有
    private String name; //名字
    private int id;  //id
    private char gender; //性别
    private int age;
    //提供一些可以操作这个属性的方法
    //提供一些public的get set 方法
    //get 获取这个数据
    public String getName() {
        return this.name;
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public char getGender() {
        return gender;
    }

    public void setGender(char gender) {
        this.gender = gender;
    }

    public int getAge() {
        return age;
    }

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

    //set  给这个数据设置相应的值
    public void setName(String name) {
        this.name = name;
    }
}

我们知道年龄肯定不可能有999这么一说,显然上述是不合法的数据。如何在程序中规避这些不合法的输入呢?------>封装,由于我们封装过,可以在set里面做一些安全性的检查。也就是说我们可以通过一些内部的封装,来使程序变得安全。(我想这个思想就是封装的本质了)

例如:

public void setAge(int age) {
        if(age>120||age<0){
            System.out.println("不合法的年龄");
        }else {
            this.age = age;
        }

    }

显然通过上面的限制,在输入999的时候,程序就会显示不合法输出。

封装的好处?

  1.  提高安全性,保护数据
  2. 隐藏代码的实现细节,也就是做了调用者,类里面的代码细节是不清楚的。
  3. 统一接口,所有的方法都是get/set
  4. 提高了系统的可维护性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值