众所周知,面向对象编程有三大特性,即封装、继承、多态
封装(encapsulation)概念
封装就是将类中的属性、数据等包围起来,让外部无法对其进行非法修改。
通俗的说,就是将自己的东西藏在保险箱中,让别人没法随意的拿到。
Talk is cheap, show me code.
public class People {
String name;
int age;
String gender;
}
我们写一个类,如果没有对其属性进行封装处理,那么我们可以随意对其进行修改
public class Test {
public static void main(String[] args) {
People people = new People();
people.name = "小猪";
people.age = 18;
people.gender = "男";
System.out.println(people.name);
System.out.println(people.age);
System.out.println(people.gender);
}
}
输出:
小猪
18
男
虽然这样我们可以很方便的对其属性进行复制,但这样我们的数据是不安全的。因为当程序代码量逐渐增加,我们很难知道什么时候对这个属性进行了什么样的操作;或者说到最后该属性的值不是我们预期想要的。所以对属性的封装就成为了必要的事。那么封装是怎样实现的?
Show you code!!!
public class People {
private String name;
private int age;
private String gender;
}
当我们对属性增加一个private则会出现一下情况
The field People.age is not visible:People.age这个字段不可见错误
既然出错了,那么怎么我想修改这个属性的值要怎么做呢?
Show you code!!!
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;
}
public String getGender() {
return gender;
}
public void setGender(String gender) {
this.gender = gender;
}
如上:对一个私有属性定义一对公有的方法,这些方法是对外暴露的,所以我们可以通过这些方法对这些属性的值进行修改
public class Test {
public static void main(String[] args) {
People people = new People();
people.setAge(18);
people.setName("小猪");
people.setGender("男");
String name = people.getName();
int age = people.getAge();
String gender = people.getGender();
System.out.println(name);
System.out.println(age);
System.out.println(gender);
}
}
运行结果:
小猪
18
男