网站首页 > java教程 正文
封装是面向对象编程(OOP)的三大核心特性之一,指将对象的状态(数据)和行为(方法)结合在一起作为一个独立的单元,并对外界隐藏其内部细节。在Java中,封装的核心思想是通过访问控制权限以及抽象的数据访问方式来实现的。
封装的好处
序号 | 好处 | 描述 |
1 | 数据保护 | 将成员变量设为私有(private),外界不能直接访问和修改对象的内部状态,从而防止了数据的随意篡改,确保了数据的安全性和一致性。 |
2 | 抽象简化 | 封装使得类能够对外提供简洁且一致的接口,使用者无需了解内部复杂的实现细节,只需通过公共方法与对象交互。 |
3 | 代码复用 | 封装后的类易于作为组件在多个程序中重复使用 |
4 | 降低耦合度 | 通过接口进行通信,而不是直接操作内部数据,降低了不同模块之间的耦合度,有利于软件的模块化设计和维护。 |
5 | 可维护性 | 封装将对象的实现细节隐藏起来,使得代码更容易理解和维护。当对象的内部实现发生变化时,只要接口保持不变,外部代码就不需要修改。 |
访问修饰符控制可见性
在Java中,有四种访问修饰符用于控制成员变量和方法的可见性:
- public:所有类都可以访问,不受包结构限制。
- protected:同一包内的其他类和所有子类都可以访问。
- (默认无修饰符):仅在同一包内的其他类可以访问,子类除非在同一个包内,否则无法访问。
- private:只有本类内部可以访问,对外部完全不可见。
实现方式
步骤 | 实现 |
1 | 将类的属性(变量)声明为私有的(使用private关键字)。 |
2 | 提供公共的getter方法来读取属性的值。 |
3 | 提供公共的setter方法来修改属性的值(如果需要的话)。 |
4 | 提供其他公共方法来执行与对象相关的操作。 |
Getter和Setter方法的应用
getter和setter方法通常用来实现封装。对于私有成员变量,我们会提供一对公共方法来进行间接访问和修改:
public class MyClass {
private String myVariable; // 私有成员变量
// Getter方法
public String getMyVariable() {
return this.myVariable;
}
// Setter方法
public void setMyVariable(String value) {
if (value != null && !value.isEmpty()) { // 可在此添加验证逻辑
this.myVariable = value;
} else {
throw new IllegalArgumentException("Invalid value");
}
}
}
Getter方法的作用:
序号 | 作用 |
1 | 提供安全的方式读取私有变量的值,可以在方法内部添加逻辑,如格式化输出或检查值的有效性。 |
2 | 允许改变返回值的行为而不影响客户端代码(如添加缓存机制)。 |
Setter方法的作用:
序号 | 作用 |
1 | 提供安全的方式来设置私有变量的值,可以在方法内部实施边界条件检查、数据转换或触发相关业务逻辑。 |
2 | 可以防止外部直接修改成员变量,增强了对象状态的一致性。 |
猜你喜欢
- 2024-11-13 Java面向对象三大特征:封装、继承、多态
- 2024-11-13 利用Java注解的简单封装,进行的一次优化
- 2024-11-13 如何封装原生的 Java NIO 以及扩展?详细到让你分分钟搞定Netty
- 2024-11-13 Java面向对象——基础2 封装、继承、多态
- 2024-11-13 想要 Spring Data JPA/MongoDB 更易用,你应该这样封装
- 2024-11-13 Java面向对象高级特性-封装(java面向对象三大特点)
- 2024-11-13 Java基础类型与封装类型的区别与联系
- 2024-11-13 java包装类的自动封装、自动拆箱和缓存
- 2024-11-13 java程序员必备的基础知识_java面向对象之封装(二)
- 2024-11-13 Java面试基础回顾03-封装(java基础面试题及答案)
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- java反编译工具 (77)
- java反射 (57)
- java接口 (61)
- java随机数 (63)
- java7下载 (59)
- java数据结构 (61)
- java 三目运算符 (65)
- java对象转map (63)
- Java继承 (69)
- java字符串替换 (60)
- 快速排序java (59)
- java并发编程 (58)
- java api文档 (60)
- centos安装java (57)
- java调用webservice接口 (61)
- java深拷贝 (61)
- 工厂模式java (59)
- java代理模式 (59)
- java.lang (57)
- java连接mysql数据库 (67)
- java重载 (68)
- java 循环语句 (66)
- java反序列化 (58)
- java时间函数 (60)
- java是值传递还是引用传递 (62)
本文暂时没有评论,来添加一个吧(●'◡'●)