Java是一门面向对象的语言。面向对象的三大特性:封装,继承,多态。封装到底是什么含义呢?通俗来讲就是屏蔽掉类的实现细节,对外提供接口让你调用。举个现实生活中的例子:
刚好618刚过,我因为需求换了一台电脑(旧电脑卡的飞起来经常死机)。拿到新电脑之后,我开机就能使用CPU,内存等功能,我插入键盘接口我就能使用键盘,我插入鼠标接口我就能使用我的鼠标。但是我并没有关心CPU是怎么工作的,我也没有关心键盘鼠标驱动的实现细节。我只是插入即可使用。这其实就是我们封装的思想--对内屏蔽细节,对外提供接口。
上面我们讲了封装的本质,那么我们一个在定义一个类的时候,类里有成员变量,成员方法。成员变量本质就是数据,成员方法本质就是功能实现。那么封装就是要讲数据和操作数据的方法进行有机的结合,隐藏对象的属性和细节,仅对外公开接口来和对象进行交互。具体怎么实现呢,这就涉及到一个权限问题了。
权限也叫访问修饰限定符,下图是权限表,图片截取网上:
缺省的意思就是在不加权限说明的时候,是有一个默认的权限,也就是default,但default不是一个权限关键字。只是默认的。而private,protected,public都是权限的关键字。
我们还要提到一个概念就是包。包其实可以理解为是一个文件夹。不同的文件夹很好的管理着不同的东西:
比如游戏的放在游戏文件夹,联系人放在联系人文件夹中。那么Java中,包的概念是一样的。为了方便管理我们写的类。分门别类的管理的这些文件夹就叫包。 举个例子就比好我们之前用的Arrays这个类。并不在我们的代码中实现。而我们想要使用就需要把这个包给导进来:
有了包的概念就能理解上面图中的一些权限问题。
我们看封装的具体实现:
我们更改了name的权限,发现类外访问是报红的。private权限只能类内访问。于是我们可以通过公共接口的手段实现,代码如下:
class Person{
private String name; //只有类内能访问,实现封装
private int age;
public Person(String name,int age){
this.name=name;
this.age=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 class TestDemo {
public static void main(String[] args) {
Person person=new Person("郭志伟",2);
System.out.println(person.getName()+" "+person.getAge());
person.setName("伟大佬");
System.out.println(person.getName()+" "+person.getAge());
}
}
输出结果如下:
代码较简单,仔细看看就明白了。这就是封装的思想。