Java高效编程(16):在公共类中使用访问器方法,而不是公共字段

news/2024/10/4 20:52:03/

概述

在软件设计中,封装是面向对象编程的基本原则之一。为了确保灵活性和安全性,公共类应通过访问器方法(getter)和修改器方法(setter)来访问字段,而不是直接暴露公共字段。这有助于后续的维护和修改。

退化类的示例

有时候,您可能会倾向于编写退化的类,这些类的唯一作用就是将实例字段分组:

java">// 这样的退化类不应该是公共的!
class 坐标点 {public double x;public double y;
}

由于此类的字段可以直接访问,这样的类不提供封装的好处(参见第15条)。直接暴露字段意味着:

  • 无法在不更改API的情况下更改类的内部表示。
  • 无法强制实施不变量。
  • 无法在字段被访问或修改时执行任何操作。

这些问题可能导致数据不一致或难以维护。因此,严格的面向对象程序员认为此类设计应当避免,应该始终使用私有字段并提供公共的访问器方法(getter)和修改器方法(setter):

封装的实现

java">// 通过访问器方法和修改器方法封装数据
class 坐标点 {private double x;private double y;// 构造函数,用于初始化坐标点对象public 坐标点(double x, double y) {this.x = x;this.y = y;

http://www.ppmy.cn/news/1534597.html

相关文章

【PostgreSQL 】实战篇——深入讨论分区表的概念、创建和管理方法,以及其在性能优化中的应用

一、背景与重要性 数据量的迅速增长对性能和管理提出了更高的要求,尤其是在处理大量数据时,传统的单表结构可能会导致查询性能下降、数据维护困难和存储管理不便。 为了解决这些问题,PostgreSQL 提供了分区表(Partitioned Table…

资源《Arduino 扩展板4-单游戏摇杆》说明。

资源链接: Arduino 扩展板4-单游戏摇杆 1.文件明细: 2.文件内容说明 包含:AD工程、原理图、PCB。 3.内容展示 4.简述 该文件为PCB工程,采用AD做的。 该文件打板后配合Arduino使用,属于Arduino的扩展板。 该文件…

华为手机连接蓝牙音响后播放声音小的问题分析

当你的华为 P70Pro 手机通过蓝牙连接到音响后,虽然将手机音量调到最大,但音响播放的声音依然很小,背后可能存在多个技术因素和设定上的问题。要理解这一现象,我们可以从设备的音量控制机制、蓝牙协议的限制、音频编码与传输的影响…

51单片机的宠物自动投喂系统【proteus仿真+程序+报告+原理图+演示视频】

1、主要功能 该系统由AT89C51/STC89C52单片机LCD1602显示模块温湿度传感器DS1302时钟模块蓝牙步进电机按键、蜂鸣器等模块构成。适用于猫猫/狗狗宠物自动喂食器等相似项目。 可实现基本功能: 1、LCD1602实时显示北京时间和温湿度 2、温湿度传感器DHT11采集环境温湿度 3、时…

html+css+js实现Collapse 折叠面板

实现效果&#xff1a; HTML部分 <div class"collapse"><ul><li><div class"header"><h4>一致性 Consistency</h4><span class"iconfont icon-jiantou"></span></div><div class"…

GO语言深度探索:并发编程与高性能网络服务器实践

GO语言深度探索&#xff1a;并发编程与高性能网络服务器实践 在当今快速发展的软件开发领域&#xff0c;Go语言&#xff08;又称Golang&#xff09;以其简洁的语法、强大的并发处理能力以及高效的编译执行速度&#xff0c;迅速成为构建高性能、高并发系统的首选语言之一。本文…

鸿蒙harmonyos next flutter混合开发之ohos工程 直接引用 flutter_module 源码

复制 flutter_module 源码 和 flutter相关文件 cp -r my_flutter_module/.ohos/flutter_module MyApplication/ cp my_flutter_module/.ohos/har/flutter.har MyApplication/har/flutter.har 修改 MyApplication/build-profile.json5,modules下新增如下内容 // 以下为新增内容…

Android wifi信号和漫游信号设置

1.wifi信号 /packages/modules/Wifi/framework/java/android/net/wifi/WifiManager.java Deprecated public static int calculateSignalLevel(int rssi, int numLevels) { if (rssi < MIN_RSSI) { //*/update wifi signal return 1;…