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;
    }
}

 

posted @ 2020-08-07 00:50  orz江小鱼  阅读(199)  评论(0编辑  收藏  举报