封装

封装定义

将类的某些信息隐藏在类内部,不允许外部程序直接访问,
通过该类提供的方法来实现对隐藏信息的操作和访问。
简单来说就是隐藏对象的信息,同时留出访问的接口。

封装特点

1.只能通过规定的方法访问数据
2.隐藏类的实例细节,方便修改和实现

如何理解封装?

举个生活中的例子,比如ATM机内部存储了很多钞票,但是用户是无法随意直接查看和获取的,这就是ATM机对钞票这个重要信息的隐藏,但同时ATM机也提供了相关的操作接口,用户只需要通过简单的操作就可以获取到机器里存储的钞票。
对于用户而言,其实是不关心机器里面到底在什么位置,以什么形式存放这些钞票的。只要能通过银行卡对钞票进行正确的存取就好了。
这样通过ATM机既保证了重要信息钞票的安全性,同时又通过了一系列的对外接口实现了用户的便捷操作。而且对于用户而言,无论ATM机的内部构造发生了怎样的变化,只要对外的操作口不发生改变,就可以照常进行存取钱操作。

封装_第1张图片
总结

封装是面向对象编程的核心思想,将对象的属性和行为封装起来,而将对象的属性和行为封装起来的载体就是类,类通常对客户隐藏其实现细节,这就是封装的思想,用户只能通过对外提供的接口访问数据

封装的实现

封装步骤
  1. 修改属性的可见性,设为private
  2. 创建getter/setter方法,设为public,用于属性的读写
  3. 在getter/setter方法中加入属性控制语句
封装_第2张图片
注意事项
  1. 只有getter方法的属性是只读属性,只有setter方法的属性是只写属性
  2. boolean类型的getter方法是is开头的,如isFlag();
  3. 如果在setter方法中有对属性进行限定,那么在带该参数的构造方法里也最好调用setter方法进行属性赋值
  4. 批量生成getter和setter方法,在eclipse中快捷键为alt+shift+s,选择Generate Getters and Setters
封装代码实现
package com.silly.animal;

/**
 * 宠物猫类
 */
public class Cat {
    // 成员属性:昵称、年龄、体重、品种
    // 1.修改属性的可见性---private 限定只能在当前类内访问
    private String name;// 昵称
    private int month;// 年龄
    private double weight;// 体重
    private String species;// 品种
    private boolean sex; //性别 
    //构造方法
    public Cat() {
    }

    public Cat(int month, String name) {
        this.name = name;
        // this.month=month;
        //如果有对属性进行判断,最好调用setter方法
        this.setMonth(month);
    }
    
    // 2.创建get/set方法
    public void setName(String name) {
        this.name = name;
    }

    public String getName() {
        return "我是一只名叫:" + this.name + "的宠物猫";
    }

    public int getMonth() {
        return month;
    }

    public void setMonth(int month) {
        // 3.在get/set方法中添加对属性的限定
        if (month <= 0)
            System.out.println("输入信息错误,宠物猫的年龄必须大于0");
        else
            this.month = month;
    }

    public double getWeight() {
        return weight;
    }

    public void setWeight(double weight) {
        this.weight = weight;
    }

    public String getSpecies() {
        return species;
    }

    public void setSpecies(String species) {
        this.species = species;
    }
    //特别注意boolean类型的getter方法
    public boolean isSex() {
        return sex;
    }

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

对封装类进行访问

public class CatTest {
    public static void main(String[] args) {
        Cat one = new Cat();
        //设置属性
        one.setName("花花");
        one.setMonth(-3);//打印输入信息错误
        //访问属性
        System.out.println("昵称:" + one.getName()); //我是一只名叫:花花的宠物猫
        System.out.println("昵称:" + one.getMonth()); //0

    }
}

你可能感兴趣的:(封装)