写点什么

JAVA 面向对象 (八)-- 封装

用户头像
加百利
关注
发布于: 3 小时前

引言: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 在后期关键字章节详细讲解)。

用户头像

加百利

关注

还未添加个人签名 2021.06.08 加入

还未添加个人简介

评论

发布
暂无评论
JAVA面向对象(八)--封装