19. java面向对象 - 封装
一、封装和隐藏
1. 封装
我们要用洗衣机,只需按一下开关和洗涤模式就可以了。有必要了解洗衣机内部的结构么。
(1)我们程序设计追求:高内聚,低耦合
① 高内聚:类的内部数据操作细节自己完成,不允许外部干涉;
② 低耦合:仅对外部暴露少量的方法用于使用。
2. 隐藏
隐藏对象内部的复杂性,只对外部公开简单的接口。便于外界调用,从而提高系统的可扩展性、可维护性。
public class Animal {
String name;
//让age为私有,限制用户传入负值
private int age;
public void setAge(int age) {
if (age >= 0 && age % 2 == 0) {
age = age;
} else {
age = 0;
}
}
}
3. 封装性体现
我们将类的属性私有化(private),同时提供公共的(public)方法来获取(getXxx)和设置(setXxx)此属性的值。拓展:①不对外暴露的私有方法 ②单例模式
二、权限修饰符
修饰符 | 类内部 | 同一个包 | 不同包子类 | 同一工程 |
---|---|---|---|---|
private | Yes | |||
default | Yes | Yes | ||
protected | Yes | Yes | Yes | |
public | Yes | Yes | Yes | Yes |
对于class的权限只可以用public和default。四种权限可以用来修饰类及类的内部结构:属性、方法、构造器、内部类;
- public类可以在任意地方被访问
- default类只可以被同一个包内部的类访问
public class Animal {
String name;
private int age;
//设置值
public void setAge(int formAge) {
if (formAge < 0 || formAge >130) {
throw new RuntimeException("传入值非法!");
} else {
age = formAge;
}
}
//取值
public int getAge(){
return age;
}
}
class animalTest{
public static void main(String[] args) {
Animal anl = new Animal();
// anl.setAge(131);
anl.setAge(10);
System.out.println(anl.getAge());
}
}