为什么建议将实例变量声明为私有?

2024-03-29

我的问题与Java有关,但它也可以应用于C#。我想知道为什么每个人都建议创建实例变量private而不是制作它们受保护的.

我们想一想。子类看不到私有变量,因此如果我需要访问或更改子类中超类的变量,我被迫使用一些访问器和修改器方法,例如getMyPrivateVariable or setMyPrivateVariable。但是,当您扩展某个类并继承其成员时,这就像您直接在子类中声明它们一样。因此从逻辑上讲,这意味着子类也应该能够直接访问实例变量,并为设计带有受保护变量的类提供了理由。我知道这种做法会破坏封装,但这在继承的情况下似乎无关紧要,因为在这种情况下,一切都像超类的成员在子类中声明一样,因此子类具有“自然权利”能够直接访问其成员,无论它们是否是继承的。在我看来,封装对于对象继承树之外的其他对象与对象的接口更为重要。

所以,我的问题是为什么每个人都建议将类的实例变量声明为私有而不是受保护?


你自己回答这个问题——封装。

例如,您有一个抽象 Cat 类。这定义了成员变量速度 - 即它的运行速度。

抽象类还定义了一个最终的 run 方法,它显然会更新速度。

现在 - 如果 Cat 的子类 - 例如Moggy或Tabby可以直接访问和修改“速度”,然后它可能会破坏run方法。

所以最好把它绑在开始的地方。如果需要,您也可以在本地声明。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么建议将实例变量声明为私有? 的相关文章

  • 使用递归查找数组中的最大值

    对于我被要求解决的问题之一 我使用 for 循环找到了数组的最大值 所以我尝试使用递归来找到它 这就是我想到的 public static int findMax int a int head int last int max 0 if h
  • JFace DialogCellEditor:如何使按钮始终出现?

    我用的是JFaceDialogCellEditor在 JFace 的一行单元格中显示一个按钮TableViewer激活时会触发一个对话框 此行为适用于以下代码 但仅当显式选择托管按钮的表的单元格时才会显示该按钮 public class C
  • 在远程 Tomcat 上自动部署 Java 应用程序

    我希望能够自动将 Java 应用程序部署到 tomcat 服务器 现在的情况 正在 Eclipse 中开发 Java 项目 Tomcat 服务器在另一台机器上运行 提供该项目的 WAR 文件 我的目标 可以轻松编译项目并将其部署到远程 To
  • 使用 IcyStreamMeta 从 SHOUTcast 获取元数据

    我正在为 Android 编写一个应用程序 从 SHOUTcast mp3 流中获取元数据 我正在使用我在网上找到的一个非常漂亮的类 我稍微修改了一下 但我仍然有两个问题 1 我必须使用 TimerTask 不断 ping 服务器来更新元数
  • Eclipse 构建 Android 应用程序:如何在编译时创建两个版本?

    我正在编写一个 Android 应用程序 并希望基于相同的代码创建两个版本 免费版本和高级版本 我有两个版本的一个代码库 具有各种运行时检查来启用或禁用某些功能 例如 public class MyAppContext extends Ap
  • Ant 复制文件而不覆盖

    Is there any command in ant to copy files from one folder structure to another without checking the last modified date t
  • Spring中需要多个相同类型的bean

    将其标记为重复之前的请求 我浏览了论坛 但在任何地方都找不到该问题的解决方案 我正在使用 Spring 3 2 编写代码 一切都是纯粹基于注释的 该代码接收从不同 XSD 文件派生的 XML 文件 所以我们可以说 有五个不同的 XSD A1
  • JTable 中的格式化字段问题 - Integer 和 Double 之间的差异

    更新 已确认为错误当 columnClass 为 Double 时 JTable 无法将给定对象格式化为 Number 错误 ID 7051636 https bugs java com bugdatabase view bug bug i
  • 通过 jdbc 执行存储过程时获取网关超时

    我正在使用 struts2 框架 它基本上是这样的 ActionClass execute call function in business class which returns an object and store this obj
  • 比 O(n) 更好的范围交集算法?

    范围交集是一个简单但不平凡的问题 已经回答过两次了 查找数字范围交集 https stackoverflow com questions 224878 find number range intersection 比较日期范围 https
  • java中使用[:punct:]函数的正则表达式

    我在用 punct 替换 a 中特殊字符的函数 字符串例如 REPLACE REGEXP REPLACE 第 1 列 punct 作为输出 作为java中SQL字符串的一部分 但我想要特定的特殊字符 不被替换 你能建议最好的方法吗 Acc
  • Android Studio 1.0.1 APK META-INF/DEPENDENCIES 中复制的重复文件

    我安装了 Android Studio 版本 1 0 1 并尝试将我的项目从 eclipse 导入到它 它给了我以下错误 Error Execution failed for task app packageDebug Duplicate
  • JavaFX 中的隐形舞台/场景

    我正在寻找一种隐藏 JavaFX 舞台或场景的方法 现在我知道了 hide 但这行不通 我需要一些仍然保留窗口的东西 但只是使其完全透明 一个很好的比喻是display none and visibility hidden在CSS中 第一个
  • 当父类也实现 IDisposable 时,在子类上实现 IDisposable

    我有一个父类和子类都需要实现IDisposable 应该在哪里virtual and base Dispose 通话发挥作用 当我刚刚覆盖Dispose bool disposing 打电话 说我实现了感觉真的很奇怪IDisposable没
  • 如何在 selenium Chrome 功能中设置默认下载目录?

    请查找以下具有 chrome 功能的代码 事实上浏览器并没有将文件下载到指定的路径 private static DesiredCapabilities getChromeCapabilities throws Exception Stri
  • int i 与 int index 等哪个更好? [复制]

    这个问题在这里已经有答案了 可能的重复 名为 i 的变量是不可接受的吗 https stackoverflow com questions 130775 is a variable named i unacceptable 循环变量的理想变
  • 光线追踪三角形

    我正在用java编写一个光线追踪器 并且我能够追踪球体 但我相信我追踪三角形的方式有问题 据我了解 这是基本算法 首先确定射线是否与plane三角形已打开 剪裁所有点 使它们与三角形位于同一平面上 因此xy以平面为例 根据沿着新平面向任意方
  • 如何在java中将ojalgo稀疏数组存储到文件中?

    我目前有一个 SparseStore 矩阵 我在其中执行大量计数和计算 我想将其存储到文件中 以便以后可以重复使用它 而无需重新执行之前的所有计算 我尝试了 Java 中的基本序列化 ObjectOutputStream outputStr
  • 在 ant 脚本中包含外部 JAR 时出错

    这是我第一次尝试编写 ANT 脚本 这是我使用 Spring 构建的简单 Hello World 应用程序的 build xml
  • JDBC多线程插入可以吗?

    我目前正在开发一个 Java 项目 我需要准备一个大的 对我来说 mysql 数据库 我必须使用 Jsoup 进行网页抓取并将结果存储到我的数据库中 据我估计 我将大约插入 1 500 000 到 2 000 000 条记录 在我的第一次试

随机推荐

  • 如何使文件系统缓存失效?

    我想测量 优化应用程序的 冷启动 启动性能 如果不实际重新启动就很难做到这一点 这显然不是一个理想的解决方案 有没有一种方法可以使整个系统的文件缓存无效 以便映射的页面访问实际上导致磁盘访问 以便我可以测量程序启动所需的时间 信息 我非常需
  • 如何使用 perl 将完整路径转换为相对路径?

    我在 Perl 程序的两个变量中拥有文件的完整路径和其父目录之一的完整路径 什么是计算文件相对于父目录的相对路径的安全方法 需要在 windows 和 unix 上工作 e g filePath full path to my file p
  • 为什么需要将地图类型转换为列表以将其分配给 pandas 系列?

    我刚刚开始学习 pandas 的基础知识 有一件事让我思考 import pandas as pd data pd DataFrame Column1 A B C data Column2 map str lower data Column
  • 帮助解决 System.BadImageFormatException:

    在通过联系本地 Web 服务的 NET 3 5 SP1 项目进行调试时 我收到了异常 System BadImageFormatException 错误的类令牌 当然 关于导致异常的原因并没有更多细节 我可以看出发生这种情况的方法 与调用者
  • 无法应用插件 [id 'forge']

    这是一个延续这个问题 https stackoverflow com questions 58312064 upgrading gradle我的第一个问题已经解决了 但是新的问题又出现了 按照其中提到的教程 解决了一些错误后 现在当我尝试运
  • 没有收到所有 ICMP 超时消息:为什么?

    我正在使用 Scapy 重播一些转储的数据包 其中我更改了 TTL 值 即使 TTL 1 我也得到了非常奇怪的结果 当我分别运行测试时间时 我可以得到大约 40 到 95 的数据包回复了 ICMP 超时消息 然后 我可以递归地重放未应答的数
  • 使用多个列名的 SQLAlchemy 连接语法

    这是我想要执行的以下 sql 查询 并且在命令行上完美运行 select from table1 join table2 using col1 col2 我无法弄清楚如何使用 SQLAlchemy 执行此操作 任何帮助将不胜感激 表之间没有
  • Boost::asio 和 boost::bind:Functor 内存永远不会被释放

    我的代码正在分配内存并且从不释放它 即使它应该 至少在我看来 标题看起来像这样 typedef boost asio ssl stream
  • 在 VideoView 中显示缩略图的问题

    我正在将 VideoView 用于网络视频 并且我还有一个包含相应缩略图的位图对象 现在我应该如何将位图设置为 VideoView 以显示缩略图 我在用着 videoView setBackgroundDrawable new Bitmap
  • OpenMP:不要使用超线程核心(一半“num_threads()”带有超线程)

    In g 4 7 中的 OpenMP 并行 效率不高吗 5x CPU 时为 2 5x https stackoverflow com questions 36950532 is openmp parallel for in g 4 7 no
  • C# 中可以有同名的公共 getter 和私有 setter 吗?

    如何为属性创建公共 getter 和私有 setter 下面的说法正确吗 public String Password set this password value private String Password get return t
  • Mongoose findOne 通过 _id 嵌入文档

    我正在尝试将菜单推送到嵌入文档 但我在餐厅里没有定义 findOne 我只是想将一些文档推送到餐厅的菜单类别中 正如您在架构中看到的 var RestaurantSchema new mongoose Schema contactTelph
  • Python 服务器客户端 WinError 10057

    我正在使用 Python 3 3 制作服务器和客户端socket模块 我的服务器代码工作正常 但此客户端代码返回错误 这是代码 import socket import sys import os sock socket socket so
  • 如何覆盖 GIN 中的绑定

    我找到了 Guice 的答案重写 Guice 中的绑定 https stackoverflow com q 483087 929804但不知道如何在 GWT 中对 GIN 执行同样的操作 提前致谢 据我所知 不支持 回答您的评论 如果您运行
  • 在 json 中存储 pandas 数据帧时保持列和行顺序

    当使用 to json 将数据存储在 json 对象中并使用 read json 读回时 行和列将按字母顺序返回 有没有办法保持结果排序或在检索时重新排序 你可以使用orient split 它将索引和列信息存储在列表中 并保留顺序 In
  • 每个故事显示不同的开放图对象

    好吧 我不确定我在开放图谱中是否做错了什么 但就是这样 我的开放图谱中有 3 个故事 它们是链接到一种对象类型的三个不同操作 Make A Pledge To gt Cause Create gt Cause Log Expense For
  • 在没有 C++ 11 的情况下使用 char16_t、char32_t 等?

    我想要固定宽度类型 包括字符类型
  • 软键盘打开时调整布局

    我在某些应用程序中看到 当显示软键盘时布局会发生变化 这当然不是adjustPan因为整个布局 可能是内部布局 发生了变化 而不仅仅是当前的EditText 例如 这是在 Evernote 登录屏幕中 你能建议一下这是怎么做的吗 下面是一个
  • 如何获取 Webview iframe 链接来启动浏览器?

    我正在使用 WebView 来显示一个页面 其中 html 包含一个 iframe 其中 src xxxxx php 该 iframe 作为带有底层链接的广告图像加载 如果我单击该图像 链接 它会尝试在原始 iframe 中加载新页面 在那
  • 为什么建议将实例变量声明为私有?

    我的问题与Java有关 但它也可以应用于C 我想知道为什么每个人都建议创建实例变量private而不是制作它们受保护的 我们想一想 子类看不到私有变量 因此如果我需要访问或更改子类中超类的变量 我被迫使用一些访问器和修改器方法 例如getM