何为封装
从事面向对象编程的 Java 程序员,不可能不知道封装,它是面向对象编程的精髓,非常重要。
那什么是封装?字面意思就是把摆在外面的东西包起来。
一句话,封装就是对外隐藏内部细节。
那为何要封装,也就是隐藏内部细节呢?
道理很简单,如果你买了一部手机,你会不会关心手机内部的细节,比如电路板是如何设计的,手机程序是如何编写的;我想绝大部分人,应该只会关心手机能够对外提供哪些功能。而手机的内部细节则被手机开发商完全封装在手机的机壳里。
想必你应该已经感受到了封装的好处,通过封装我们可以轻松优雅的玩转各种复杂设备,因为我们压根就不关心这些玩意儿是怎么造出来的,只在意提供了哪些功能,以及这些功能如何使用。
封装的好处总结如下:
-
封装可以隐藏大量内部细节降低使用难度(手机使用)
-
封装可以使修改内部细节不影响外部使用(手机升级)
-
封装可以降低内部组件之间的耦合度(手机维修)
Java 封装
Java 语言中提供了两个权限访问修饰符,分别是 private 和 public,它们专门实现 Java 对象的封闭和开放。
public 访问修饰符
public 表示公用的,也就是对外公开
public 访问修饰符可以修饰类、成员变量和方法,代码如下:
public class Man {
public int age;
public String name;
public void play() {
System.out.println("喜欢打游戏");
}
}
以上代码在类、成员变量和方法中都使用了 public 权限访问修饰符,表示它们都对外开放,对象使用者可以访问它们,如下:
Man man = new Man();
man.age = 32;
man.name = "张三“;
man.play();
private 访问修饰符
private 表示私有的,也就是隐藏,不对外公开
假如我们不想随便对外公开年龄、姓名和兴趣,那么就可以使用 private 将其隐藏起来,让对象使用者没有权限访问,如下:
public class Man {
private int age;
private String name;
private void play() {
System.out.println("喜欢打游戏");
}
}
还是用外部对象访问,如下:
Man man = new Man();
man.age = 32;
man.name = "张三“;
man.play();
看一看结果如何
C:UsersxubinDesktopJavaMyProjectsrcHelloWorld.java
Error:(9, 12) java: age 在 Man 中是 private 访问控制
Error:(10, 12) java: name 在 Man 中是 private 访问控制
Error:(11, 12) java: play() 在 Man 中是 private 访问控制
编译报错了,错误提示是 private 访问权限,外部对象禁止访问。
Getter 访问器与 Setter 修改器
Getter 访问器和 Setter 修改器是为private 修饰的类成员变量提供安全访问的一种方式
public class Man {
private int age;
private String name;
public int getAge( ) { // Getter 访问器
return age;
}
public void setAge(int age) {// Setter 修改器
this.age = age;
}
}
使用 Getter 访问器与 Setter 修改器,如下:
Man man = new Man();
man.setAge(32);
System.out.println( man.getAge( ) );
Getter 访问器和 Setter 修改器的作用
-
可以为 private 修饰的属性(或成员变量)提供统 一的外界访问通道
-
可以为外界提供访问安全性(访问条件判断)
-
可以在访问器中设置访问权限控制或管理(实现按权限级别访问内部数据)
总结
在面向对象编程中,我们需要考虑哪些成员变量或方法需要对外公开,提供给对象使用者(也就是 public);哪些成员变量或方法需要隐藏细节,禁止对象使用者访问(也就是 private)。