面向对象的特征之一:封装性
* 一、问题的引入
* 当我们创建一个类的对象以后,我们可以通过“对象.属性”的方式,对对象的属性进行赋值。
* 这里赋值操作受到属性的数据类型、存储范围的制约,除此之外,没有其他制约条件。但是,
* 实际问题中,我们往往需要给属性赋值加入额外的限制条件,这个条件就不能在属性声明时
* 体现,我们只能通过方法进行限制条件的添加。
* 同时,我们需要避免用户再使用“对象.属性”的方式进行赋值,则需要将属性声明为私有的
* (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;
}
}