封装的概念
封装(Encapsulation)是面向对象方法的重要原则,是一种信息隐藏技术,就是把对象的属性和操作(或服务)结合为一个独立的整体,并尽可能隐藏对象的内部实现细节。
封装的优点
-
良好的封装能够减少耦合。
-
类内部的结构可以自由修改。
-
可以对成员变量进行更精确的控制。
-
隐藏信息,实现细节。
在java中通过访问限定符private,protected和public实现封装。
那么private,protected和public都是什么呢?下面我们来了解一下访问限定符。
访问限定符
Java中主要通过类和访问权限来实现封装:类可以将数据以及封装数据的方法结合在一起,更符合人类对事物的认知,而访问权限用来控制方法或者字段能否直接在类外使用。Java中提供了四种访问限定符:
private 私有的:最小访问级别。
default 系统默认值:包级私有访问级别。
protected 受保护的:同类,同包,子类。
public 公共的:最大访问级别。
上图中我们可以看到,四种限定符都提到了包的概念,那么什么是包呢?
封装扩展—包
包是对类、接口等的封装机制的体现,是一种对类或者接口等的很好的组织方式,为了更好的管理类,把多个类收集在一起成为一组,称为软件包。有点类似于目录。
自定义一个包:右键 src -> 新建(New) -> 包(Package)
创建完成后便可看到:
了解了包的概念后,我们来进行封装的实现。
封装的实现步骤
1、通过访问限制符修改类中属性的可见性,从而限制对类中属性的访问(一般限制为private)
class Person {
private String name; //名字
private int age; //年龄
}
当使用private修饰属性后,我们使用时编译器便会报错:
这段代码中,将 name 和 age 属性设置为私有的,只能本类才能访问,其他类都访问不了,如此就对信息进行了隐藏。
2、将成员变量赋值为private后,对类的成员变量设置权限,这样别的类就不能进行访问,若我们想使用该属性,则需在该类里面定义get与set方法,一个用于获取,一个用户修改。也就是对每个值属性提供对外的公共方法访问,即创建一对赋取值方法,用于对私有属性的访问。例如:
定义get与set方法:
1、右键-> Generate
2、点击创建Getter and Setter方法
3、根据自己需要的属性来定义
4、Get 、Set方法定义完成:
class Person{
private String name;
private int age;
public int getAge(){
return age;
}
public String getName(){
return name;
}
public void setAge(int age){
this.age = age;
}
public void setName(String name){
this.name = name;
}
}
this关键字:是所在函数所属对象的引用,简单来说,哪个对象调用了this所在的函数,this就代表哪个对象。是为了解决实例变量(private String name)和局部变量(setName(String name)中的name变量)之间发生的同名的冲突。
封装案例
package demo;
class Person {
private String name; //名字
private int age; //年龄}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public void result(){
System.out.print(name+"今年"+age+"岁啦!");
}
}
public class Test2 {
public static void main(String[] args) {
Person person=new Person();
person.setName("小明");
person.setAge(20);
person.result();
}
}
运行结果: