JAVA笔记(八)面向对象–封装
引言:java核心思想为面向对象,含有三大特性:封装,继承,多态,今天我们具体来讲解封装。
一.包的使用:
1.包使用的原因:
Windows树形文件系统,文档分门别类,易于查找和管理,使用目录解决文件同名冲突问题,在java中如何解决存放两个同名的类而不冲突?
2.包使用的意义:
- 解决类同名问题,防止命名冲突
- 允许类组成较小的单元(类似文件夹),易于找到和使用相应的文件
- 更好的保护类、属性和方法
3.包的创建:
- 作为Java源代码第一条语句
- 用package声明包,以分号结尾
代码如下:
package cn.hz; //包名
public class Student {
//代码省略...
}
4.包的命名规范:
- 包名由小写字母组成,不能以圆点开头或结尾
- 包名之前最好加上唯一的前缀,通常使用组织倒置的网络域名
- 包名后续部分依不同机构内部的规范不同而不同
二、权限修饰符
学习封装之前我们先要学习java中对于权限的设定方式,java中用于限定使用范围的关键字有如下四种:
- **私有权限 private:**private可以修饰数据成员,构造方法,方法成员,不能修饰类(此处指外部类,不考虑内部类)。被private修饰的成员,只能在定义它们的类中使用,在 其他类中不能调用。
- **默认权限 default:**类,数据成员,构造方法,方法成员,都能够使用默认权限,即不写任何关键字。默认权限即同包权限,同包权限的元素只能在定义它们的类中,以及同包 的类中被调用。
- **受保护权限 protected:**protected可以修饰数据成员,构造方法,方法成员,不能修饰类(此处指外部类,不考虑内部类)。被protected修饰的成员,能在定义它们的类中,同包 的类中被调用。如果有不同包的类想调用它们,那么这个类必须是定义它们的类的子类。
- **公共权限 public:**public可以修饰类,数据成员,构造方法,方法成员。被public修饰的成员,可以在任何一个类中被调用,不管同包或不同包,是权限最大的一个修饰符。
三、封装
在面向对象程式设计方法中,封装(英语:Encapsulation)是指一种将抽象性函式接口的实现细节部分包装、隐藏起来的方法。
封装可以被认为是一个保护屏障,防止该类的代码和数据被外部类定义的代码随机访问。
要访问该类的代码和数据,必须通过严格的接口控制。
封装最主要的功能在于我们能修改自己的实现代码,而不用修改那些调用我们代码的程序片段。
适当的封装可以让程式码更容易理解与维护,也加强了程式码的安全性。
1.封装的定义:
将属性私有化,并提供公共的访问方式。
2.封装的优点:
- 良好的封装能够减少耦合。
- 类内部的结构可以自由修改。
- 可以对成员变量进行更精确的控制。
- 隐藏信息,实现细节。
3.封装的步骤:
我们还是以学生类为演示
- 首先修改学生的属性的可见性来限制对属性的方法(一般限制为private),代码如下
package cn.hz; //包名
public class Student {
private String name; //定义属性并私有化:学生姓名
public int age; //定义属性并私有化:学生
}
以上代码将学生的属性name和age都限定为private私有,只能本类才能访问,其他类都访问不了,如此就对信息进行了隐藏。
- 对每个值属性提供对外的公共方法访问,也就是创建一对赋取值方法,用于对私有属性的访问,代码如下:
package cn.hz; //包名
public class Student {
private String name; //定义属性并私有化:学生姓名
public int age; //定义属性并私有化:学生
//提供给公共的访问方法:get获取
public String getName() {
return name;
}
//提供给公共的访问方法:set设置
public void setName(String name) {
this.name = name;
}
//提供给公共的访问方法:get获取
public int getAge() {
return age;
}
//提供给公共的访问方法:set设置
public void setAge(int age) {
this.age = age;
}
}
采用 this 关键字是为了解决实例变量(private String name)和局部变量(setName(String name)中的name变量)之间发生的同名的冲突。(this在后期关键字章节详细讲解)。