对封装性的理解:
当我们创建一个类的对象以后,我们可以通过"对象.属性"的方式,对对象的属性进行赋值.这里赋值操作要受属性的数据类型和存储范围的制约.
除此之外没有其他的制约条件.但是在实际问题中,我们往往需要给属性赋值加入额外的限制条件.这个限制条件就不能在属性声明时体现,我们只能通过方法进行限制条件的添加.同时我们需要避免用户再使用"对象.属性"的方式来进行对属性赋值.则需要将属性声明为私有的
-----此时,针对于属性就体现了封装性.
封装性的体现
我们将类的属性私有化(private),同时提供公共的(public)方法来获取(getXxx)和设置(setXxx)此属性的值.
通常在一个类中,属性都私有化(private),并且对外提供getter and setter方法
如果属性没有封装,那么在本类之外创建对象后,可以直接访问修改属性,不安全。
package com.lhz.java.test;## JavaSE面向对象三大特性之一(封装性)
//测试类
public class AnimalTest {
public static void main(String[] args) {
Animal a = new Animal();
a.name="小黑";
// a.age=2; // 'age' has private access in 'com.lhz.java.test.Animal'
// a.legs=4; //'legs' has private access in 'com.lhz.java.test.Animal' 不能直接调了
a.show();
a.eat();
// a.setLegs(-4);
// a.show();
// a.legs=5; 通过直接调属性赋值还是可以出来 但是是错误的信息
// a.show(); 这个时候就要把不合理的方式(直接调属性这个方法)禁掉 通过权限修饰符不让人来直接调然后赋值
a.setLegs(4);//一方面提供方法 通过方法去写限制条件 setLegs方法
a.show();
}
}
//创建一个Animal类
class Animal{
String name;
private int age;
private int legs;
//对属性私有化以后主要体现在两个方面
//1.对属性的设置
public void setLegs(int l){
if(l>=0 && l%2==0 ){
legs=l;
}else{
legs=0;
}
}
//2.对属性的获取
public int getLegs(){
return legs;
}
public void eat(){
System.out.println("动物进食");
}
public void show(){
System.out.println("name="+name+",age="+age+",legs="+legs);
}
//给属性 age加上private权限,想要在类外部访问私有属性,则需要提供公共的方法来获取和设置此属性的值然后来调它
//对外提供一个获取age属性的方法(getter和setter方法)
public int getAge(){
return age;
}
public void setAge(int a){
age = a;
}
}