封装是面向对象思想的三大特征之一。
修饰符 | 当前类 | 同一包内 | 子孙类(同一包) | 子孙类(不同包) | 其他包 |
---|---|---|---|---|---|
public | Y | Y | Y | Y | Y |
protected | Y | Y | Y | Y/N(需具体说明) | N |
default | Y | Y | Y | N | N |
private | Y | N | N | N | N |
class Student {
private int age;
private String name;
public void setAge(int age) {
this.age = age;
}
public int getAge() {
return age;
}
public void setName(String name) {
this.name = name;
}
public String getName() {
return name;
}
}
public class StudentDemo {
public static void main(String[] args) {
Student s = new Student();
s.setAge(19);
s.setName("lyx");
System.out.println(s.getAge());
System.out.println(s.getName());
}
}
运行结果为:19
lyx
在以上的代码中我们对Student类中的age和name变量进行私有(即将age和name封装在Student类中),在类的外部无法直接对它们进行访问(修改和读取)。但我们在Student类中分别定义公共方法set和get,我们就可以实现对它们的访问了。
私有只是封装的一种表示形式。
之所以对外提供公共方法对其访问,是因为可以在访问方式中加入逻辑判断语句。
对访问的数据进行操作,提高代码的健壮性。
在上述的例子中,我们通过setAge方法对age进行修改,但是age的值需要设定为一个合理的数值,如果对age的值不加检查地就设定可能会导致一些错误。比如age的合理值为[0,100],我们就可以将setAge这个方法的代码改为以下:
public void setAge(int age) {
if(0<=age && age<=100)
this.age = age;
else
System.out.println("age非法");
}
在进行如上修改之后,如果age的值不合法,就会有所提示。
参考资料:https://www.runoob.com/java/java-modifier-types.html#protected-desc
原文:https://www.cnblogs.com/liyuxin2/p/12244319.html