封装与隐藏的含义

过将数据声明为私有的 (private) ,再提供公共的 (public) 方法即 getXxx() 和 setXxx() 实现对该属性的操作,以实现下述目的:

  • 隐藏一个类中不需要对外提供的实现细节;。
  • 使用者只能通过事先定制好的方法来访问数据,可以方便地加入控制逻辑,限制对属性的不合理操作。
  • 便于修改,增强代码的可维护性。
  1. public class Demo {
  2. public static void main(String[] args) {
  3. Animal dog = new Animal();
  4. dog.name = "大黄";
  5. dog.age = 10;
  6. dog.setLegs(10);
  7. dog.show();
  8. }
  9. }
  10. class Animal{
  11. String name;
  12. int age;
  13. private int legs; // 通过权限限制符 用户将不可访问
  14. // 对于属性的设置
  15. public void setLegs(int l){
  16. if( l >= 0 && l % 2 == 0){
  17. legs = l;
  18. }else {
  19. legs = 0;
  20. // 抛出异常
  21. }
  22. }
  23. // 对于属性的获取
  24. public int getLegs(){
  25. return legs;
  26. }
  27. public void eat(){
  28. System.out.println("eating");
  29. }
  30. public void show(){
  31. System.out.println("name = " + name + " , age = " + age + " , legs = " + legs);
  32. }
  33. }

权限修饰符

  • 封装性的体现需要权限修饰符的配合

表格:

修饰符 类内部 同一个包 不同包的子类 同一个工程
private yes
缺省 yes yes
protected yes yes yes
public yes yes yes

图:

总结补充

1. 属性赋值过程

赋值的位置

  • 默认初始化
  • 显式初始化
  • 构造器中初始化
  • 通过“对象.属性“或“对象.方法”的方式赋值

    赋值的先后顺序

  • 1-2-3-4

2. JavaBean

所谓javaBean,是指符合如下标准的Java类:

  • 类是公共的
  • 有一个无参的公共的构造器
  • 有属性,且有对应的get、set方法

例如:

  1. class Person{
  2. private String name;
  3. private int id;
  4. private Person(){
  5. }
  6. private void setName(String name){
  7. this.name = name;
  8. }
  9. private String getName(){
  10. return name;
  11. }
  12. private void setId(int id){
  13. this.id = id;
  14. }
  15. private int getId(){
  16. return id;
  17. }
  18. }
  1. <br /> <br /> <br />