热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

轻松理解java访问修饰符!

一包的作用把关系密切的类组织在一起。这让我想到了家庭。以下的类名都是基于孩子起,有爸爸,妈妈,女儿和女儿的舅舅;packa


包的作用把关系密切的类组织在一起。这让我想到了家庭。
以下的类名都是基于孩子起,有爸爸,妈妈,女儿和女儿的舅舅;

package 家;public class 爸爸 {private double 私房钱;protected double 建设银行;//(家里开支所用)//构造函数和方法省略
}class 妈妈{private double 生活开支的钱;爸爸 老公=new 爸爸();public void 要钱(){生活开支的钱=老公.建设银行;//在同一个家庭(包),证明关系比较亲,可以直接去拿建设银行的卡去取钱(即访问类的除private以外的域)}
}

package 姥姥家;import 家.爸爸;
public class 舅舅 {private double 烟酒的钱;爸爸 大姐夫=new 爸爸();public void 要钱(){烟酒的钱=大姐夫.????//想多了,我们没那么亲,不在同一个家庭里,又不是爸爸类的孩子(即不在同一个包里,并且没有继承爸爸类)}
}class 女儿 extends 爸爸{private double 学费;public void 要钱(){学费=建设银行;}
}

爸爸的私房钱为private类型,证明只要自己知道,就算在同一个家庭(包)里的妻子和在姥姥家(另一个包)的女儿都无法知道。体现java三大特性之一:封装,也称数据隐藏。好处很明显:数据安全啊!私房钱被发现还不得有“生命危险”,所以连自己的孩子(extends继承)也不能说;
【补充:封装,从形式上看就是将数据和行为组合在一个类中,并对对象的使用者隐藏了数据的实现】

爸爸生活开支的钱为protected类型,证明和自己亲的人(即同一个家庭,或者自己的孩子,在java里对应着包和子类)可以知道。所以妻子和在姥姥家的女儿可以直接访问爸爸的建设银行去取钱;而孩子的舅舅就不行了吧,爸爸说:我们还没那么亲吧(亲:在同一个包,或者为其子类),所以无发访问。;

要慎用protected修饰属性!!!假设现在爸爸的关于生活开支的钱的内部实现修改(不存在建设银行里了,改存在支付宝里),那么爸爸要通知没一个和自己亲的人(同一个包中的类和其他包中继承此类的类),让他们知道新的取款方式,以便修改他们的“要钱方法里的代码”。这违背了oop提倡的数据封装原则。

受保护的方法更有意义如下:

package 家;public class 爸爸 {private double 私房钱;private double 支付宝;//(家里开支所用),这里把改为privateprotected double 取钱(){//填加了protected方法;return 支付宝;}
}class 妈妈{private double 生活开支的钱;爸爸 老公=new 爸爸();public void 要钱(){生活开支的钱=老公.取钱();}
}

package 姥姥家;import 家.爸爸;
public class 舅舅 {private double 烟酒的钱;爸爸 大姐夫=new 爸爸();public void 要钱(){烟酒的钱=大姐夫.????//还是想多了,我们没那么亲}
}class 女儿 extends 爸爸{private double 学费;public void 要钱(){学费=取钱.();}
}

好处在于只要你的方法不变,不管你内部实现怎么变(用建设银行,农业银行,等等),我现在只要钱(调用方法),不用要你的建设银行卡了(访问数据域),你一会把钱存着一会把钱存哪里。这样我也轻松了,不用随着类的改变,修改自己的代码了,降低了依赖程度!


推荐阅读
  • 在对WordPress Duplicator插件0.4.4版本的安全评估中,发现其存在跨站脚本(XSS)攻击漏洞。此漏洞可能被利用进行恶意操作,建议用户及时更新至最新版本以确保系统安全。测试方法仅限于安全研究和教学目的,使用时需自行承担风险。漏洞编号:HTB23162。 ... [详细]
  • ### 优化后的摘要本学习指南旨在帮助读者全面掌握 Bootstrap 前端框架的核心知识点与实战技巧。内容涵盖基础入门、核心功能和高级应用。第一章通过一个简单的“Hello World”示例,介绍 Bootstrap 的基本用法和快速上手方法。第二章深入探讨 Bootstrap 与 JSP 集成的细节,揭示两者结合的优势和应用场景。第三章则进一步讲解 Bootstrap 的高级特性,如响应式设计和组件定制,为开发者提供全方位的技术支持。 ... [详细]
  • 在Java程序设计中,实现高效的分页功能是提升应用性能的关键之一。本文介绍了通过使用 `PageController` 类来处理大数据集的分页操作,该类能够从一个较大的集合中提取出指定大小的小集合。具体实现中,通过优化数据访问和减少内存消耗,确保了分页操作的高效性和稳定性。此外,文章还探讨了分页算法的优化策略,包括缓存机制和懒加载技术的应用,以进一步提高系统的响应速度和用户体验。 ... [详细]
  • 使用 ListView 浏览安卓系统中的回收站文件 ... [详细]
  • 优化后的标题:深入探讨网关安全:将微服务升级为OAuth2资源服务器的最佳实践
    本文深入探讨了如何将微服务升级为OAuth2资源服务器,以订单服务为例,详细介绍了在POM文件中添加 `spring-cloud-starter-oauth2` 依赖,并配置Spring Security以实现对微服务的保护。通过这一过程,不仅增强了系统的安全性,还提高了资源访问的可控性和灵活性。文章还讨论了最佳实践,包括如何配置OAuth2客户端和资源服务器,以及如何处理常见的安全问题和错误。 ... [详细]
  • 在处理 XML 数据时,如果需要解析 `` 标签的内容,可以采用 Pull 解析方法。Pull 解析是一种高效的 XML 解析方式,适用于流式数据处理。具体实现中,可以通过 Java 的 `XmlPullParser` 或其他类似的库来逐步读取和解析 XML 文档中的 `` 元素。这样不仅能够提高解析效率,还能减少内存占用。本文将详细介绍如何使用 Pull 解析方法来提取 `` 标签的内容,并提供一个示例代码,帮助开发者快速解决问题。 ... [详细]
  • 本文探讨了如何利用Java代码获取当前本地操作系统中正在运行的进程列表及其详细信息。通过引入必要的包和类,开发者可以轻松地实现这一功能,为系统监控和管理提供有力支持。示例代码展示了具体实现方法,适用于需要了解系统进程状态的开发人员。 ... [详细]
  • 使用Maven JAR插件将单个或多个文件及其依赖项合并为一个可引用的JAR包
    本文介绍了如何利用Maven中的maven-assembly-plugin插件将单个或多个Java文件及其依赖项打包成一个可引用的JAR文件。首先,需要创建一个新的Maven项目,并将待打包的Java文件复制到该项目中。通过配置maven-assembly-plugin,可以实现将所有文件及其依赖项合并为一个独立的JAR包,方便在其他项目中引用和使用。此外,该方法还支持自定义装配描述符,以满足不同场景下的需求。 ... [详细]
  • 在Java Web服务开发中,Apache CXF 和 Axis2 是两个广泛使用的框架。CXF 由于其与 Spring 框架的无缝集成能力,以及更简便的部署方式,成为了许多开发者的首选。本文将详细介绍如何使用 CXF 框架进行 Web 服务的开发,包括环境搭建、服务发布和客户端调用等关键步骤,为开发者提供一个全面的实践指南。 ... [详细]
  • 分享一款基于Java开发的经典贪吃蛇游戏实现
    本文介绍了一款使用Java语言开发的经典贪吃蛇游戏的实现。游戏主要由两个核心类组成:`GameFrame` 和 `GamePanel`。`GameFrame` 类负责设置游戏窗口的标题、关闭按钮以及是否允许调整窗口大小,并初始化数据模型以支持绘制操作。`GamePanel` 类则负责管理游戏中的蛇和苹果的逻辑与渲染,确保游戏的流畅运行和良好的用户体验。 ... [详细]
  • 在Java项目中,当两个文件进行互相调用时出现了函数错误。具体问题出现在 `MainFrame.java` 文件中,该文件位于 `cn.javass.bookmgr` 包下,并且导入了 `java.awt.BorderLayout` 和 `java.awt.Event` 等相关类。为了确保项目的正常运行,请求提供专业的解决方案,以解决函数调用中的错误。建议从类路径、依赖关系和方法签名等方面入手,进行全面排查和调试。 ... [详细]
  • 服务器部署中的安全策略实践与优化
    服务器部署中的安全策略实践与优化 ... [详细]
  • Python多线程编程技巧与实战应用详解 ... [详细]
  • 本文汇集了我在网络上搜集以及在实际面试中遇到的前端开发面试题目,并附有详细解答。无论是初学者还是有一定经验的开发者,都应深入理解这些问题背后的原理,通过系统学习和透彻研究,逐步形成自己的知识体系和技术框架。 ... [详细]
  • Python 程序转换为 EXE 文件:详细解析 .py 脚本打包成独立可执行文件的方法与技巧
    在开发了几个简单的爬虫 Python 程序后,我决定将其封装成独立的可执行文件以便于分发和使用。为了实现这一目标,首先需要解决的是如何将 Python 脚本转换为 EXE 文件。在这个过程中,我选择了 Qt 作为 GUI 框架,因为之前对此并不熟悉,希望通过这个项目进一步学习和掌握 Qt 的基本用法。本文将详细介绍从 .py 脚本到 EXE 文件的整个过程,包括所需工具、具体步骤以及常见问题的解决方案。 ... [详细]
author-avatar
郭健曲
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有