封装是面向对象系统的一个重要特性,是抽象数据类型思想的具体体现。
在面向对象的程序设计中,抽象数据类型是用“类”这种结构来代表的,而“类”又是面向对象的工具可理解和操纵的。
1 封装的概念
封装也称为信息隐藏,是指利用抽象数据类型将数据和基于数据的操作封装在一起,使其构成一个不可分割的独立实体,数据被保护在抽象数据类型的内部,尽可能地隐藏内部的细节,只保留一些对外接口使之与外部发生联系。
系统的其他部分只有通过包裹在数据外面的被授权的操作来与这个抽象数据类型交流与交互。
也就是说,用户无需知道对象内部方法的实现细节,但可以根据对象提供的外部接口(对象名和参数)访问该对象。
封装具有下述特征:
在类的定义中设置访问对象属性(数据成员)及方法(成员方法)的权限,限制本类对象及其他类的对象使用的范围。
提供一个接口来描述其他对象的使用方法。
其他对象不能直接修改本对象所拥有的属性和方法。
封装反映了事物的相对独立性。
封装在编程上的作用是使对象以外的部分不能随意存取对象的内部数据(属性),从而有效地避免了外部错误对它的“交叉感染”。
另一方面,当对象的内部做了某些修改时,由于它只通过少量的接口对外提供服务,因此大大减少了内部的修改对外部的影响。
面向对象系统的封装单位是对象,类概念本身也具有封装的意义,因为对象的特性是由它所属的类说明来描述的。
2 类的严谨定义
[类修饰符] class 类名 [extends 父类名] [implements 接口列表]
{
数据成员
成员方法
}
合理地使用这些可选项,可以充分地展示封装、继承和信息隐藏等面向对象特性。
类修饰符(Qualifier):用于规定类的一些特殊性,主要是说明对它的访问限制。
extends 父类名:指明新定义的类是由已存在的父类派生出来的。
implements 接口列表:Java 本来只支持单继承,为了给多重继承的软件开发提供方便,它提供了这一接口机制。
3 类修饰符
类的修饰符用于说明对它的访问限制,一个类可以没有修饰符,也可以有 public、final、abstract 等几种不同的修饰符。
3.1 无修饰符的情况
如果一个类前无修饰符,则这个类只能被同一个包里的类使用。
Java 规定,同一个程序文件中的所有类都在同一个包中。
无修饰符的类可以被同一个程序文件中的类使用,但不能被其他程序文件中的其他包中的类使用。
3.2 public 修饰符
如果一个类的修饰符是 public,则这个类是公共类。
公共类不但可供它所在包中的其他类使用,也可供其他包中的类使用。
在程序中可以用 import 语句引用其他包中的 public 类。
Java 规定,在一个程序文件中,只能定义一个 public 类,其余的类可以是无修饰符的类,也可以是用 final 修饰符定义的最终类,否则编译时会报错。
3.3 final 修饰符
用 final 修饰符修饰的类被称为最终类。
最终类是不能被任何其他类所继承的。
定义最终类的目的有三:
用来完成某种标准功能。将一个类定义为 final 类,则可以将它的内容、属性和功能固定下来,与它的类名形成稳定的映射关系,从而保证引用这个类时所实现的功能是正确无误的。
提高程序的可读性。从父类派生子类,再从子类派生子类,使软件变得越来越复杂。而在必要的层次上设置 final 类,可以提高程序的可读性。
提高安全性。病毒的闯入途径之一是在一些处理关键信息的类中派生子类,再用子类去替代原来的类。由于用 final 修饰符定义的类不能再派生子类,截断了病毒闯入的途径,因而提高了程序的安全性。
3.4 abstract 修饰符
用 abstract 修饰符修饰的类称为抽象类。
抽象类刻画了研究对象的公有行为特征,并通过继承机制将这些特征传送给它的派生类。
其作用在于将许多有关的类组织在一起,提供一个公共的基类,为派生具体类奠定基础。
此外,当一个类中出现一个或多个用 abstract 修饰符定义的方法时,则必须在这个类的前面加上 abstract 修饰符,将其定义为抽象类。
3.5 类修饰符使用注意事项
可以同时使用两个修饰符来修饰一个类,当使用两个修饰符修饰一个类时,这些修饰符之间用空格分开,写在关键字 class 之前,修饰符的顺序对类的性质没有任何影响。
需要注意的是:一个类可以为修饰为 public abstract,也可以被修饰为 public final,但不能被修饰为 abstract final,这是因为 abstract 类自身没有对象,需要派生子类后再创建子类的对象,而 final 类不能派生子类,所以不存在用 abstract final 两个修饰符修饰的类。
分享到:
相关推荐
### Java封装类的作用 在Java编程语言中,封装是一种重要的概念,它有助于提高代码的安全性和可维护性。本文将深入探讨Java封装类的作用,并通过具体的示例帮助读者更好地理解这一概念。 #### 封装的基本原理 ...
本项目专注于ECharts在后台的封装工作,特别是使用Java语言来完成这一过程。这样的封装可以使得前端与后端之间的数据传输更加高效,同时也降低了前端开发的工作负担。 首先,我们要理解为什么要在后台进行ECharts的...
Java线程池封装是Java并发编程中重要的一环,合理的线程池配置和封装能显著提升程序的性能和稳定性。理解线程池的工作原理,根据业务需求选择合适的参数,以及正确处理拒绝策略,都是实现高效并发处理的关键。在实际...
Java注解和反射机制是Java开发中的重要工具,它们极大地增强了代码的可读性和灵活性。在结合JDBC(Java Database Connectivity)API时,可以构建出更高效、更易维护的数据访问层。本案例通过注解的方式,简化了JDBC...
这种封装机制可以带来很多好处。首先,它可以隐藏对象的内部实现细节,使得外界无法直接访问对象的私有属性,从而提高了代码的安全性。其次,封装可以使得代码更加灵活和可维护,因为对象的内部实现可以随时被修改,...
本篇文章将深入探讨Java中的`Logger`封装,以及如何通过`LoggerUtil.java`文件来增强其功能。 首先,`Logger`类是Java的日志接口,它负责生成和管理日志消息。默认情况下,这些消息会被打印到控制台,但可以通过...
### JAVA 内存视图与封装 #### 一、引言 在计算机科学领域,特别是对于面向对象编程语言如Java而言,深入理解对象在内存中的布局对于开发高效、可靠的软件至关重要。本章节将通过《JAVA 内存视图与封装》这一课件,...
在Java中,将Java对象的数据封装成XML格式的字符串,通常涉及到对象序列化的过程。对象序列化是将对象的状态转换为字节流,以便存储或在网络上传输。这个过程可以通过实现`java.io.Serializable`接口来完成。反序列...
注意,由于Java的封装特性,我们需要通过`setAccessible(true)`使私有属性可访问。 这个方法虽然简单,但已经能够满足基本的需求。然而,在实际项目中,我们可能需要处理更复杂的情况,如嵌套的对象、自定义的转换...
这个压缩包文件“基于java8新特性+反射机制实现list不同实体类互转.zip”提供了一种解决方案,它利用了Java 8的新特性和反射机制来实现这种转换,并将这个功能封装为一个工具类。 首先,Java 8引入了许多新特性,...
封装是 Java 中的一种机制,允许将数据和方法封装在一起,以提高代码的安全性和可维护性。封装的优点是可以隐藏内部实现细节,并提供公共接口来访问数据和方法。 在 Java 中,封装可以通过使用访问修饰符来实现,如...
Java 封装机制详解 Java 封装是 Java 编程语言中的一种机制,旨在隐藏对象的内部实现细节,提供公共接口来访问对象的状态和行为。封装是面向对象编程(OOP)的一种基本特征,它可以帮助我们编写更加模块化、可维护...
Java Native Interface (JNI) 是Java平台提供的一种机制,允许Java代码和其他语言写的代码进行交互。本教程将详细讲解如何将C++库封装为JNI接口,以便于Java程序调用。 首先,了解JNI的基本概念。JNI是一套接口,它...
4. **异常处理**:确保在可能出现异常的地方添加合适的异常捕获和处理机制,以保证服务的稳定性。 接下来,`MQPublishService.java`表示发布者服务,它负责发送消息到RabbitMQ。封装发布者线程涉及的主要知识点有:...
封装是一种将数据和方法捆绑在一起的机制,使数据受到保护,防止未经授权的访问和修改。继承则是从已有的类创建新类的过程,允许新类继承父类的属性和方法,从而实现代码的复用和扩展。 首先,我们来详细讨论封装。...
Java反射机制是Java编程语言中的一个重要特性,它允许运行中的Java程序对自身进行检查并且可以直接操作程序的内部属性。在Java中,反射机制的核心类集中在java.lang.reflect包下,包括Class、Constructor、Method和...
在"java 语音合成PCM转MP3"这个主题中,我们需要关注以下几个关键知识点: 1. **Java TTS库**:Java提供了内置的Java Speech API (JSAPI),其中包含Text-to-Speech引擎,如FreeTTS和MaryTTS,可以将文本转化为PCM...
Java 内部类可以用于实现某些功能,例如事件处理、数据封装等。 在本实验中,我们使用 Java 内部类来实现某些功能,例如 MySlider 类和 MyTime 类。MySlider 类用于处理滚动条事件,MyTime 类用于处理 Timer 事件。...
在这份“国内外 Java Script 经典封装”资源中,我们能看到开发者们通过封装来提升代码复用性和效率的14种经典案例。封装是编程中的一个重要概念,它能帮助我们将复杂的功能模块化,使得代码更易于理解和维护。 1. ...
Java反射机制是Java编程语言中的一个强大特性,它允许程序在运行时检查和操作类、接口、字段和方法的信息。这个特性使得Java具备了高度的灵活性,能够在运行时动态地发现和使用类的属性和方法,即使这些信息在编译时...