面向对象学习笔记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,避免在类的外部创建实例。

浙公网安备 33010602011771号