我们先写一个普通的封装例子:
建立新的类:Person
public class Person {
String name;//姓名
int age;//年龄
public void show() {
System.out.println("我叫:" + name + "," + "年龄是:" + age);
}
}
再建立新的类:Demo08Person
public class Demo08Person {
public static void main(String[] args) {
Person per = new Person();
per.age = 10;
per.name="霏霏子";
per.show();
}
}
我们运行一下Demo08Person

如果我们把age改成负数,-10,是不是也可以输出呢?

答案是可以的。
问题描述:定义Person的年龄时,无法阻止不合理的数值被设置进来。
解决方案:用private关键字将需要保护的成员变量进行修饰。
一旦使用private进行修饰,那么本类当中仍然可以进行随意访问。
但是!超出本类范围之外就不能直接访问了。
怎么写呢?

然后我们运行一下Demo08Person

出现了错误。是因为在Person中设置不受影响,但是在别的类Demo08Person中不能直接访问Person类里的age。
既然不能直接访问,但是我们可以间接访问啊!


间接访问private成员变量,就是定义一对儿Geeter/Setter方法。
但是这写代码还是不能判断年龄是否合理,我们再改一下代码。
Person类:
package 面向对象;
public class Person {
String name;//姓名
private int age;//年龄
public void show() {
System.out.println("我叫:" + name + "," + "年龄是:" + age);
}
//这个成员方法,专门用于向age设置数据
public void setAge(int num) {
if (num < 100 && num >= 0) {//判断年龄是否合理
age = num;
}else {
System.out.println("数据不合理!");
}
}
//这个成员方法是专门私语获取age的数据
public int getAge() {
return age;
}
}
DemoPerson类:
package 面向对象;
public class Demo08Person {
public static void main(String[] args) {
Person per = new Person();
// per.age = -10;//直接访问private是错误写法。
per.setAge(-20);//把20交给num,num交给age
per.name="霏霏子";
per.show();
}
}
运行结果:

注意事项:
一定是setXxxx或者是getXxxx,set和get后面的单词首字母必须大写,这是小驼峰命名规则。
对于Getter来说,不能有参数,返回值类型和成员变量对应。
对于Setter来说,不能有返回值,参数类型和成员变量对应。
本文通过一个Person类的例子,展示了Java中的封装概念。当尝试直接修改private成员变量age时,会遇到访问限制。为了解决这个问题,我们使用getter和setter方法进行间接访问,并在setter方法中添加了年龄合理性判断。这样确保了外部类不能直接修改不合理数据,同时提供了数据验证的机制。

被折叠的 条评论
为什么被折叠?



