为什么要封装
在Java面向对象的思想中,封装是指一种将抽象性函数式接口的实现细节部分包装、隐藏起来的方法。封装可以被认为是一个保护屏障,防止本类的代码和数据被外部类定义的代码随机访问。
不 使 用 封 装 示 例
public class Student {
String name; // 声明姓名属性
int age; // 声明年龄属性
void read() {
System.out.println("大家好,我是"+name+",年龄"+age);
}
}
public class Example03 {
public static void main(String[] args) {
Student stu = new Student(); // 创建学生对象
stu.name = "张三"; // 为对象的name属性赋值
stu.age = -18; // 为对象的age属性赋值
stu.read(); // 调用对象的方法
}
}
在上述代码中,第12行代码将年龄赋值为-18岁,这在程序中是不会有任何问题的,因为int的值可以取负数。但是在现实中,-18明显是一个不合理的年龄值。为了避免这种错误的发生,在设计Student类时,应该对成员变量的访问作出一些限定,不允许外界随意访问,这就需要实现类的封装。
如何实现封装
类的封装是指将对象的状态信息隐藏在对象内部,不允许外部程序直接访问对象的内部信息,而是通过该类提供的方法实现对内部信息的操作访问。
在Java开发中,在定义一个类时,将类中的属性私有化,即使用private关键字修饰类的属性,被私有化的属性只能在类中被访问。如果外界想要访问私有属性,则必须通过setter和getter方法设置和获取属性值。
使 用 封 装 示 例
setter和getter方法(右击空白处-generate-Gette and Stter- 键盘按住Ctrl选择所有参数-再点击ok即可)
使用private关键字将属性name和age声明为私有变量
public class Student {
private String name;
private int age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
if (age<=0){
System.out.println("您输入的年龄有误!");
}else {
this.age=age;
}
}
public void read(){
System.out.println("大家好,我是"+name+"年龄"+age);
}
}
public class Example04 {
public static void main(String[] args) {
Student stu=new Student();
stu.setName("王大");
stu.setAge(-18);
stu.read();
}
}
getName()方法和getAge()方法用于获取name属性和age属性的值,setName()方法和setAge()方法方法用于设置name属性和age属性的值。程序运行结果如下图。