目录
一、引言
在面向对象编程中,封装性是一个非常重要的概念。随着系统的日益复杂,良好的封装可以提高代码的可维护性、可扩展性和安全性。本文将深入探讨 Java 中的封装性,包括其重要性、实现方式以及相关知识点。
二、为什么需要封装性
(一)系统复杂性与类的管理
随着系统越来越复杂,类的数量也会不断增加。在这种情况下,类之间的访问必须得到妥善管理,以遵循面向对象的开发原则,即高内聚、低耦合。
(二)内聚与耦合的概念
- 内聚:指一个模块各个元素彼此结合的紧密程度。高内聚意味着类的内部数据操作细节由自己完成,不允许外部干涉,从而实现重用和独立。
- 耦合:是一个软件内不同模块之间互连的程度的度量。低耦合意味着尽量暴露少量的方法给外部使用,方便外部调用,减少因一个模块的变化而影响其他模块的可能性,避免出现“多米诺效应”。
三、何为封装性
封装就是把客观事物封装成抽象概念,并且类可以把自己的数据和方法只向可信的类或对象开放。通俗来说,就是把该隐藏的隐藏起来,把该暴露的暴露出来。
四、如何实现数据封装
在 Java 中,通过权限修饰符可以实现数据封装。Java 规定了以下权限修饰符:private
、缺省(即没有显式指定权限修饰符)、protected
、public
。使用这四种权限修饰符可以修饰类的成员。
(一)封装性的体现
- 私有化类的属性,提供公共的
get
和set
方法,对属性进行获取或修改。 - 将类中不需要对外暴露的方法设置为
private
。
以下是一个示例代码:
package com.encapsulation.exer1;
public class Person {
private int age;
// 设置 age 属性
public void setAge(int a){
if(a>=0&&a<=130){
age = a;
} else {
System.out.println("不合法");
}
}
// 获取 age 属性
public int getAge(){
return age;
}
}
class PersonTest {
public static void main(String[] args) {
Person p1 = new Person();
p1.setAge(20);
System.out.println(p1.getAge());
}
}
五、类的成员之三构造器
(一)构造器的理解
构造器是一种特殊的方法,用于在创建对象时初始化对象的状态。
(二)构造器的作用
- 搭配
new
关键字创建类的对象。 - 在创建对象的同时,可以给对象的相关属性赋值。
(三)构造器的使用说明
构造器声明的格式为:权限修饰符 类名(形参列表){ }。创建类以后,如果没有显式提供任何构造器,系统会默认提供一个空参构造器。一旦显式声明了构造器,系统就不再提供空参构造器。
六、实例变量赋值过程
(一)赋值位置
在类的属性中,可以在以下位置给属性赋值:
- 默认赋值:在属性声明时,如果没有显式初始化,会有默认值。
- 显式赋值:在属性声明时直接给定初始值。
- 构造器中赋值:在构造器中通过参数为属性赋值。
- 通过对象.方法赋值:调用类的方法为属性赋值。
- 通过对象.属性方式赋值:直接通过对象访问属性并赋值。
(二)执行顺序
这些位置的执行先后顺序为:默认赋值 -> 显式赋值 -> 构造器中赋值 -> 通过对象.方法赋值/通过对象.属性方式赋值。
七、总结
封装性是 Java 面向对象编程中的重要概念,它有助于提高代码的质量和可维护性。通过合理使用权限修饰符、构造器以及正确的实例变量赋值顺序,可以更好地实现封装,使代码更加安全、可靠。在实际开发中,我们应该充分利用封装性的优势,遵循良好的编程规范,提高软件的质量。