类存在一个边界,边界之内的细节隐藏起来,只留下对外的接口(如:笔记本、手机、饮水机)
为什么使用封装:(1)易用,简单(2)提高数据安全性(3)实现对属性的访问权限控制,增加程序的易维护性。
面向对象封装的体现:
四种权限的访问修饰符对实体的修饰
|
private |
默认 |
protected |
public |
类(外部类) |
N |
Y |
N |
Y |
方法 |
Y |
Y |
Y |
Y |
属性 |
Y |
Y |
Y |
Y |
四种访问权限修饰符的作用范围
在类上的权限修饰符我们一般都定义成public的,方法大多数时public的(使用一些设计模式可能会使用protected或private),属性绝大多数都是private
将属性私有化,使用private关键字完成属性私有化,如果在其他类中直接访问一个带有private的属性时报错,private修饰的属性只能在本类中访问
方法的访问控制(四种访问权限):
先通过public的对外公开的set方法来设置私有的属性值
再通过public的对外公开的get方法来获得私有的属性值
封装的要领,是站在用户的角度去思考怎么去描述一个类,它应该有什么属性和行为,而不是去考虑如何实现。
也就是外部分为两种:子类和非子类,对于子类而言,protected等同于public,而对于非子类protected又等同于private。
比如在Employee类中,如果name是私有的,那么这个访问就是被拒绝的,而如果是保护的则可以。
public void print() {
super.print();
System.out.println(name);
System.out.println(salary);
}
即使是保护的成员,对于非子类的外部访问也是拒绝的,比如在测试类中就是不可以。
public class Test {
public static void main(String[] args) {
Person p = new Person("3320078427849803","zhang","男");
Employee e = new Employee("413739879472078","wang","女",3600);
p.print();
e.print();
System.out.println(e.name);
}
}