Java面向对象封装性

115 阅读1分钟
  • 一、问题的引入

  • 当我们创建一个类的对象以后,我们可以通过“对象.属性”的方式,对对象的属性进行赋值。

  • 这里赋值操作受到属性的数据类型、存储范围的制约,除此之外,没有其他制约条件。但是,

  • 实际问题中,我们往往需要给属性赋值加入额外的限制条件,这个条件就不能在属性声明时

  • 体现,我们只能通过方法进行限制条件的添加。

  • 同时,我们需要避免用户再使用“对象.属性”的方式进行赋值,则需要将属性声明为私有的

  • (private),此时,针对属性就体现了封装性。

  • 二、封装性的体现:

  • 我们将类的属性xxx私有化(private),同时提供公共的(public)方法来

  • 获取(getXXX())和设置(setXXX())此属性的值。

  • 拓展:封装性的体现:①属性私有化

  • ②不对外暴露的私有方法

  • ③单例设计模式

  • ...

  • 三、权限修饰符(封装性的体现,需要权限修饰符)

  • (权限从小到大排序)

  • 四种权限可以用来修饰类的内部结构:属性、方法、构造器、内部类

  • 修饰类 只能缺省或public

public classAnimalTest {public static voidmain(String[] args) {

Animal animal=newAnimal();

animal.setAge(12);

animal.setLegs(4);

animal.setName("cat");

animal.show();

}

}classAnimal

{privateString name;private intage;private intlegs;public voidshow()

{

System.out.println("name="+name+",age="+age+",legs="+legs);

}public void setLegs(intlegs) {if( legs>=0 && legs % 2 ==0)

{this.legs =legs;

}else{this.legs=0;

}

}public intgetLegs() {returnlegs;

}publicString getName() {returnname;

}public voidsetName(String name) {this.name =name;

}public intgetAge() {returnage;

}public void setAge(intage) {this.age =age;

}