java从头记-public、protected、default、private

当定义一个类及其成员时,可以使用不同的访问修饰符来控制类成员的可见性,从而限定它们的作用域。以下是详细解释每个访问修饰符的作用:

  1. public 访问修饰符:

    • public 成员可以被任何其他类访问,无论是否在同一个包内。
    • 在不同的包内,可以使用类的对象来访问 public 成员。
    • public 成员的作用域最广,可在整个程序中访问。
    • 示例:
    public class MyClass {public int publicField;public void publicMethod() {// 在这里编写代码}
    }
    
  2. protected 访问修饰符:

    • protected 成员只能在同一个包内的类和该类的子类中访问。
    • 在不同的包内,只有该类的子类可以通过继承方式访问 protected 成员。
    • protected 成员的作用域介于 public 和默认访问修饰符之间。
    • 示例:
    public class MyClass {protected int protectedField;protected void protectedMethod() {// 在这里编写代码}
    }
    
  3. 默认(default)访问修饰符:

    • 如果没有使用任何访问修饰符,则成员默认为 default,也称为包级访问。
    • default 成员只能在同一个包内的其他类中访问。
    • default 成员在不同的包内是不可见的,即其他包中的类无法直接访问。
    • 示例:
    class MyClass {int defaultField;void defaultMethod() {// 在这里编写代码}
    }
    
  4. private 访问修饰符:

    • private 成员只能在同一个类内部访问,其他类无法直接访问。
    • private 修饰符提供了最高级别的封装,确保成员的隐藏性,只能通过类的公共方法间接访问。
    • private 成员的作用域最小,仅限于类内部。
    • 示例:
    public class MyClass {private int privateField;private void privateMethod() {// 在这里编写代码}
    }
    

根据程序的需求和设计原则,选择合适的访问修饰符来限定类成员的作用域,以保证程序的安全性和可维护性。遵循访问修饰符的最佳实践,可以有效地控制类成员的可见性,并降低代码的耦合性,使代码更加健壮和易于维护。

访问修饰符同一类内部同一包内的类不同包内的子类不同包内的非子类
public可见可见可见可见
protected可见可见可见不可见
default可见可见不可见不可见
private可见不可见不可见不可见

在表格中,对于每个访问修饰符,标记了该修饰符下成员的可见性情况:

  • “可见” 表示成员可以被访问。
  • “不可见” 表示成员在当前情况下不可被访问。

需要注意的是,对于protected访问修饰符,虽然子类可以访问其父类中的protected成员,但是在不同包内的非子类中仍然不可见。对于default访问修饰符,虽然在同一包内的类中可以访问,但是在不同包内的类中仍然不可见。而private访问修饰符则在任何情况下都只能在类内部访问。

这些访问修饰符的不同作用域和可见性有助于控制类成员的访问权限,从而实现封装、隐藏数据,并保证程序的安全性和可维护性。

具体示例

// 文件名:Student.javapublic class Student {public String name;      // 公开访问protected int age;       // 受保护访问int score;              // 默认访问修饰符private String address;  // 私有访问// 构造方法public Student(String name, int age, int score, String address) {this.name = name;this.age = age;this.score = score;this.address = address;}// 公开方法public void printInfo() {System.out.println("姓名:" + name);System.out.println("年龄:" + age);System.out.println("成绩:" + score);// 注意:私有成员在类的内部可以直接访问System.out.println("地址:" + address);}// 受保护方法protected void showAge() {System.out.println("年龄:" + age);}// 默认访问修饰符方法void showScore() {System.out.println("成绩:" + score);}// 私有方法private void showAddress() {System.out.println("地址:" + address);}
}
// 文件名:Main.javapublic class Main {public static void main(String[] args) {Student student = new Student("Alice", 20, 85, "Beijing");// 公开成员和方法可以在任何地方访问student.name = "Bob";student.printInfo();// 受保护成员和方法只能在同一个包或子类中访问student.age = 21;student.showAge();// 默认访问修饰符的成员和方法只能在同一个包中访问student.score = 90;student.showScore();// 私有成员和方法只能在同一个类中访问// student.address = "Shanghai";  // 编译错误// student.showAddress();        // 编译错误}
}

在上面的示例中,我们定义了一个名为 Student 的类,并使用不同的访问修饰符来控制成员的可见性。在 Main 类中,我们可以看到不同访问修饰符对成员和方法的可访问范围产生的影响。请注意,Main 类和 Student 类在同一个包内,因此可以访问默认访问修饰符和受保护访问修饰符的成员和方法。而私有访问修饰符的成员和方法只能在类的内部访问,其他类无法直接访问。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/55562.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【力扣】209. 长度最小的子数组 <滑动窗口>

【力扣】209. 长度最小的子数组 给定一个含有 n 个正整数的数组和一个正整数 target 。 找出该数组中满足其和 ≥ target 的长度最小的连续子数组 [numsl, numsl1, …, numsr-1, numsr] ,并返回其长度。如果不存在符合条件的子数组,返回 0 。 示例 1&a…

3种CSS实现背景图片全屏铺满自适应的方式

01 margin:0px; background: url(images/bg.png) no-repeat; background-size:100% 100%; background-attachment:fixed; url(images/beijing.png)——图片路径的位置; no-repeat—— 图片不重复; center 0px——center是距离页面左边的定位&#xf…

【【萌新的STM32学习-18 中断的基本概念3】】

萌新的STM32学习-18 中断的基本概念3 EXTI和IO映射的关系 AFIO简介(F1) Alternate Function IO 复用功能IO 主要用于重映射和外部中断映射配置 1.调试IO配置 来自AFIO_MAPR[26:24] , 配置JTAG/SWD的开关状态 (这个我们并不用太过深刻的关注&…

Flutter 状态管理引子

1、为了更好地了解状态管理,先看看什么是状态。 在类似Flutter这样的响应式编程框架中,我们可以认为U相关的开发就是对数据进行封装,将之转换为具体的U1布局或者组件。借用Flutter官网的一张图,可以把我们在第二部分做的所有开发…

Go并发可视化解释 - Select语句

昨天,我发布了一篇文章,用可视化的方式解释了Golang中通道(Channel)的工作原理。如果你对通道的理解仍然存在困难,最好呢请在阅读本文之前先查看那篇文章。作为一个快速的复习:Partier、Candier 和 Stringe…

启动metastore服务报错

启动Metastore的时候报错: 简略的报错信息: MetaException(message:Error creating transactional connection factory)Caused by: MetaException(message:Error creating transactional connection factory)Caused by: javax.jdo.JDOFatalInternalExce…

使用VisualStudio制作上位机(五)

文章目录 使用VisualStudio制作上位机(五)第四部分:GUI界面数据显示使用VisualStudio制作上位机(五) Author:YAL 第四部分:GUI界面数据显示 这一部分,主要实现GUI的界面显示。 上一文已经实现了CAN数据的接收,并将数据更新到数组里。所以在做界面的显示时,只需要在…

C#设计模式六大原则之--接口隔离原则

设计模式六大原则是单一职责原则、里氏替换原则、依赖倒置原则、接口隔离原则、迪米特法则、开闭原则。它们不是要我们刻板的遵守,而是根据实际需要灵活运用。只要对它们的遵守程度在一个合理的范围内,努为做到一个良好的设计。本文主要介绍一下.NET(C#)…

软考高级系统架构设计师系列论文真题一:论软件系统架构风格:真题分析、理论素材、精品范文赏析

软考高级系统架构设计师系列论文真题一:论软件系统架构风格:真题分析、理论素材、精品范文赏析 一、论软件系统架构风格二、论文解题思路1.找准核心论点2.理论素材准备三、精品范文赏析1.摘要2.正文3.总结一、论软件系统架构风格 系统架构风格是描述某一特定应用领域中系统组…

数据结构(Java实现)-ArrayList与顺序表

什么是List List是一个接口,继承自Collection。 List的使用 List是个接口,并不能直接用来实例化。 如果要使用,必须去实例化List的实现类。在集合框架中,ArrayList和LinkedList都实现了List接口。 线性表 线性表(lin…

【LeetCode】392. 判断子序列 - 双指针

这里写自定义目录标题 2023-8-24 18:53:25 392. 判断子序列 2023-8-24 18:53:25 class Solution {public boolean isSubsequence(String s, String t) {int sIndex 0;// 遍历原始字符串for (int i 0; i < t.length(); i) {// 子字符串的下标 已经等于 子字符串的长度// …

0821|C++day1 初步认识C++

一、思维导图 二、知识点回顾 【1】QT软件的使用 1&#xff09;创建文件 创建文件时&#xff0c;文件的路径一定是全英文 2&#xff09;修改编码 工具--->选项--->行为--->默认编码&#xff1a;system 【2】C和C的区别 C又叫C plus plus&#xff0c;C是对C的扩充&…

Ubuntu18.04 交叉编译curl-7.61.0

下载 官方网址是&#xff1a;curl 安装依赖库 如果需要curl支持https协议&#xff0c;需要先交叉编译 openssl,编译流程如下&#xff1a; Ubuntu18.04 交叉编译openssl-1.1.1_我是谁&#xff1f;&#xff1f;的博客-CSDN博客 解压 # 解压&#xff1a; $tar -xzvf curl-7.61.…

机器学习——KNN算法

1、&#xff1a;前提知识 KNN算法是机器学习算法中用于分类或者回归的算法&#xff0c;KNN全称为K nearest neighbour&#xff08;又称为K-近邻算法&#xff09; 原理&#xff1a;K-近邻算法采用测量不同特征值之间的距离的方法进行分类。 优点&#xff1a;精度高 缺点&…

【Eclipse】汉化简体中文教程(官方汉化包,IDE自带软件安装功能),图文详情

目录 0.环境 1.步骤 1&#xff09;查看eclipse的版本 2&#xff09;在官网找语言包&#xff0c;并复制链接 3&#xff09;将链接复制到eclipse中 4&#xff09;汉化完成 0.环境 windows11&#xff0c;64位&#xff1b; eclipse 2021-6版本 1.步骤 思路&#xff1a;在官网找…

LabVIEW利用线性压缩弹簧开发重量测量系统

LabVIEW利用线性压缩弹簧开发重量测量系统 柔性传感器的曲率半径相对于指定重量的变化特性可用作力测量方法。在许多应用中&#xff0c;例如&#xff1a;汽车和工业控制&#xff0c;计算机外围设备&#xff0c;操纵杆和测量设备&#xff0c;带有压缩弹簧和柔性传感器的重量测量…

python中以 _ _ 开头的属性 和方法

在Python中&#xff0c;以下划线 (_) 开头的属性和方法通常被视为内部使用或私有的。而以双下划线 (__&#xff09;开头并且不以双下划线结尾的属性和方法叫做“名称修饰&#xff08;name mangling&#xff09;”。 以单下划线 (_) 开头的属性和方法&#xff1a; 这种命名约定暗…

MVSNet (pytorch版) 搭建环境 运行dtu数据集重建 实操教程(图文并茂、超详细)

文章目录 1 准备工作1.1 下载源码1.2 测试集下载2 配置环境3 dtu数据集 重建演示3.1 重建效果查看4 补充解释4.1 bash 脚本文件超参数解释4.2 lists/dtu解释5 Meshlab查看三维点云时 ,使用技巧总结1 Meshlab查看三维点云时 ,换背景颜色2 Meshlab查看三维点云时,点云颜色很暗…

咸鱼之王俱乐部网站开发

我的俱乐部 最新兑换码 *注意区分大小写&#xff0c;中间不能有空格&#xff01; APP666 HAPPY666 QQ888 QQXY888 vip666 VIP666 XY888 app666 bdvip666 douyin666 douyin777 douyin888 happy666 huhushengwei888 taptap666 周活动 宝箱周 宝箱说明 1.木质宝箱开启1个…

电容器件选型与应用案例

关注参数&#xff08;1&#xff09;容量和误差 实际电容量和标称电容量允许的最大偏差范围。在选型上注意精度等级&#xff0c;用字母表示&#xff1a;D—0.5%、F—1%、G—2%、J—5%、K—10%、M—20% &#xff08;2&#xff09;额定工作电压 电容器在电路中能够长期稳定、可靠工…