19. java面向对象 - 封装

一、封装和隐藏

1. 封装

​ 我们要用洗衣机,只需按一下开关和洗涤模式就可以了。有必要了解洗衣机内部的结构么。

​(1)我们程序设计追求:高内聚,低耦合

​ ① 高内聚:类的内部数据操作细节自己完成,不允许外部干涉;

​ ② 低耦合:仅对外部暴露少量的方法用于使用。

2. 隐藏

​ 隐藏对象内部的复杂性,只对外部公开简单的接口。便于外界调用,从而提高系统的可扩展性、可维护性。

public class Animal {
    String name;
    //让age为私有,限制用户传入负值
    private int age;

    public void setAge(int age) {
        if (age >= 0 && age % 2 == 0) {
            age = age;
        } else {
            age = 0;
        }
    }
}

3. 封装性体现

​ 我们将类的属性私有化(private),同时提供公共的(public)方法来获取(getXxx)和设置(setXxx)此属性的值。拓展:①不对外暴露的私有方法 ②单例模式

二、权限修饰符

修饰符 类内部 同一个包 不同包子类 同一工程
private Yes
default Yes Yes
protected Yes Yes Yes
public Yes Yes Yes Yes

对于class的权限只可以用public和default。四种权限可以用来修饰类及类的内部结构:属性、方法、构造器、内部类;

  • public类可以在任意地方被访问
  • default类只可以被同一个包内部的类访问
public class Animal {
    String name;
    private int age;
    //设置值
    public void setAge(int formAge) {
        if (formAge < 0 || formAge >130) {
            throw new RuntimeException("传入值非法!");
        } else {
            age = formAge;
        }
    }
    //取值
    public int getAge(){
        return age;
    }
}


class animalTest{
    public static void main(String[] args) {
        Animal anl = new Animal();
        // anl.setAge(131);
        anl.setAge(10);
        System.out.println(anl.getAge());
    }
}
posted @ 2020-01-01 15:20  qi.hu  阅读(100)  评论(0编辑  收藏  举报