Java面向对象-封装性
面向对象的特征之一:封装性
* 一、问题的引入
* 当我们创建一个类的对象以后,我们可以通过“对象.属性”的方式,对对象的属性进行赋值。
* 这里赋值操作受到属性的数据类型、存储范围的制约,除此之外,没有其他制约条件。但是,
* 实际问题中,我们往往需要给属性赋值加入额外的限制条件,这个条件就不能在属性声明时
* 体现,我们只能通过方法进行限制条件的添加。
* 同时,我们需要避免用户再使用“对象.属性”的方式进行赋值,则需要将属性声明为私有的
* (private),此时,针对属性就体现了封装性。
* 二、封装性的体现:
* 我们将类的属性xxx私有化(private),同时提供公共的(public)方法来
* 获取(getXXX())和设置(setXXX())此属性的值。
* 拓展:封装性的体现:①属性私有化
* ②不对外暴露的私有方法
* ③单例设计模式
* ...
*
* 三、权限修饰符(封装性的体现,需要权限修饰符)
* (权限从小到大排序)
*
* 权限 类内部 同一个包 不同包的子类 同一个工程
* 1.private y n n n
* 2.缺省 y y n n
* 3.protected y y y n
* 4.public y y y y
*
* 四种权限可以用来修饰类的内部结构:属性、方法、构造器、内部类
* 修饰类 只能缺省或public
public class AnimalTest { public static void main(String[] args) { Animal animal=new Animal(); animal.setAge(12); animal.setLegs(4); animal.setName("cat"); animal.show(); } } class Animal { private String name; private int age; private int legs; public void show() { System.out.println("name="+name+",age="+age+",legs="+legs); } public void setLegs(int legs) { if( legs>=0 && legs % 2 ==0) { this.legs = legs; } else { this.legs=0; } } public int getLegs() { return legs; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } }