面向对象学习笔记11 - 封装性

1、为什么需要封装性

随着系统越来越复杂,类会越来越多,那么类之间的访问边界必须把握好,
面向对象开发原则要遵循“高内聚,低耦合”。
高内聚:类的内部数据操作细节自己完成,不允许外部干涉。
低耦合:仅暴露少量的方法给外部使用,尽量方便外部调用。

2、什么是封装性

将客观事物封装成抽象的类,并且类可以把自己的数据和方法只向可信的类
或者对象开放,向没必要开放的类或者对象隐藏信息。

3、如何实现封装性

权限修饰符
private、缺省、protected、public
作用:可以使用四种权限修饰符来修饰类和类的内部成员。当这些成员被调
用时,体现可见性的大小。

4、例子

无封装性的情况

class Animal{//动物类
    String name;//名字
    int legs;//腿的条数
}
public class AnimalTest{
    public static void main(String[] args){
        Animal animal = new Animal();
        animal.name = "金蟾";
        animal.legs = 3;
        /*这个地方的赋值语句在语法上没有问题,即便给负数这里编译器也可以通过
          但是我们需要给这样的赋值过程加一些限制,
          大部分的动物的腿的条数为正数,且为偶数。封装性可以解决这个问题
}

有封装性的情况

class Animal{//动物类
    String name;
    private int legs;//腿的条数,这里加上了限制,在类之外无法直接赋值
    public void setLegs(int legs){
        if(legs >= 0 && legs % 2 == 0){
            this.legs = legs;
        }else{
            System.out.println("数据非法");
        }
    }
}
public class AnimalTest{
    public static void main(String[] args){
        Animal animal = new Animal();
        animal.name = "金蟾";
        //animal.legs = 3;此时再这样赋值,由于legs是私有的,会报错,无法赋值
        animal.setLegs(4);//使用公共的方法赋值,复制成功
        animal.setLegs(-1);//这时赋值不成功,会返回数据非法
    }
}

上面的过程在做的事情是将legs属性私有化,使得只能使用有限制的方法对legs进行赋值
使用set、get方法对属性进行赋值和得到属性的值。

5、权限修饰符比较

权限修饰符 本类内部 本包内 其他包的子类 其他包的非子类
private × × ×
缺省 × ×
protected ×
public

:只能用public和缺省修饰(外部类)。
类的内部成员:可以使用四种权限修饰符进行修饰。
高频使用:public、private。
低频使用:缺省、protected。

6、封装性的体现

场景1:私有化(private)类的属性,提供公共(public)的get和set方法,
用以对该属性进行修改和获取。
场景2:将类中不需要对外暴露的方法设置为private。
场景3:单例模式中构造器private,避免在类的外部创建实例。

posted @ 2025-05-05 04:15  谁来着?  阅读(34)  评论(0)    收藏  举报