从 01 开始 从 01 开始
首页
  • 📚 计算机基础

    • 计算机简史
    • 数字电路
    • 计算机组成原理
    • 操作系统
    • Linux
    • 计算机网络
    • 数据库
    • 编程工具
    • 装机
  • 🎨 前端

    • Node
  • JavaSE
  • Java 高级
  • JavaEE

    • 构建、依赖管理
    • Ant
    • Maven
    • 日志框架
    • Junit
    • JDBC
    • XML-JSON
  • JavaWeb

    • 服务器软件
    • 环境管理和配置管理-科普篇
    • Servlet
  • Spring

    • Spring基础
  • 主流框架

    • Redis
    • Mybatis
    • Lucene
    • Elasticsearch
    • RabbitMQ
    • MyCat
    • Lombok
  • SpringMVC

    • SpringMVC 基础
  • SpringBoot

    • SpringBoot 基础
  • Windows 使用技巧
  • 手机相关技巧
  • 最全面的输入法教程
  • 最全面的浏览器教程
  • Office
  • 图片类工具
  • 效率类工具
  • 最全面的 RSS 教程
  • 码字工具
  • 各大平台
  • 校招
  • 五险一金
  • 职场规划
  • 关于离职
  • 杂谈
  • 自媒体
  • 📖 读书

    • 读书工具
    • 走进科学
  • 🌍 英语

    • 从零开始学英语
    • 英语兔的相关视频
    • Larry 想做技术大佬的相关视频
  • 🏛️ 政治

    • 反腐
    • GFW
    • 404 内容
    • 审查与自我审查
    • 互联网
    • 战争
    • 读书笔记
  • 💰 经济

    • 关于税
    • 理财
  • 💪 健身

    • 睡眠
    • 皮肤
    • 口腔健康
    • 学会呼吸
    • 健身日志
  • 🏠 其他

    • 驾驶技能
    • 租房与买房
    • 厨艺
  • 电影

    • 电影推荐
  • 电视剧
  • 漫画

    • 漫画软件
    • 漫画推荐
  • 游戏

    • Steam
    • 三国杀
    • 求生之路
  • 小说
  • 关于本站
  • 关于博主
  • 打赏
  • 网站动态
  • 友人帐
  • 从零开始搭建博客
  • 搭建邮件服务器
  • 本站分享
  • 🌈 生活

    • 2022
    • 2023
    • 2024
    • 2025
  • 📇 文章索引

    • 文章分类
    • 文章归档

晓林

程序猿,自由职业者,博主,英语爱好者,健身达人
首页
  • 📚 计算机基础

    • 计算机简史
    • 数字电路
    • 计算机组成原理
    • 操作系统
    • Linux
    • 计算机网络
    • 数据库
    • 编程工具
    • 装机
  • 🎨 前端

    • Node
  • JavaSE
  • Java 高级
  • JavaEE

    • 构建、依赖管理
    • Ant
    • Maven
    • 日志框架
    • Junit
    • JDBC
    • XML-JSON
  • JavaWeb

    • 服务器软件
    • 环境管理和配置管理-科普篇
    • Servlet
  • Spring

    • Spring基础
  • 主流框架

    • Redis
    • Mybatis
    • Lucene
    • Elasticsearch
    • RabbitMQ
    • MyCat
    • Lombok
  • SpringMVC

    • SpringMVC 基础
  • SpringBoot

    • SpringBoot 基础
  • Windows 使用技巧
  • 手机相关技巧
  • 最全面的输入法教程
  • 最全面的浏览器教程
  • Office
  • 图片类工具
  • 效率类工具
  • 最全面的 RSS 教程
  • 码字工具
  • 各大平台
  • 校招
  • 五险一金
  • 职场规划
  • 关于离职
  • 杂谈
  • 自媒体
  • 📖 读书

    • 读书工具
    • 走进科学
  • 🌍 英语

    • 从零开始学英语
    • 英语兔的相关视频
    • Larry 想做技术大佬的相关视频
  • 🏛️ 政治

    • 反腐
    • GFW
    • 404 内容
    • 审查与自我审查
    • 互联网
    • 战争
    • 读书笔记
  • 💰 经济

    • 关于税
    • 理财
  • 💪 健身

    • 睡眠
    • 皮肤
    • 口腔健康
    • 学会呼吸
    • 健身日志
  • 🏠 其他

    • 驾驶技能
    • 租房与买房
    • 厨艺
  • 电影

    • 电影推荐
  • 电视剧
  • 漫画

    • 漫画软件
    • 漫画推荐
  • 游戏

    • Steam
    • 三国杀
    • 求生之路
  • 小说
  • 关于本站
  • 关于博主
  • 打赏
  • 网站动态
  • 友人帐
  • 从零开始搭建博客
  • 搭建邮件服务器
  • 本站分享
  • 🌈 生活

    • 2022
    • 2023
    • 2024
    • 2025
  • 📇 文章索引

    • 文章分类
    • 文章归档
  • JavaSE

    • 我的 Java 学习路线
    • 安装 Java
    • Java 数据类型

    • Java 多版本配置
    • 面向对象

      • 枚举类
      • static 关键字
      • classpath:JVM 查找类的机制
      • 包:Java 组织类的方式
      • jar 包
      • class 版本
      • 抽象类
      • 接口
      • 访问性修饰符
        • 访问修饰符介绍
        • 公有访问修饰符-public
        • 受保护的访问修饰符-protected
        • 默认修饰符-default
        • 私有访问修饰符-private
        • 继承与访问性
        • 小结
      • 非访问性修饰符
      • 内部类
    • Java 核心类

    • IO

    • Java 与时间

    • 异常处理

    • 哈希和加密算法

    • Java8 新特性

    • 网络编程

  • JavaSenior

  • JavaEE

  • JavaWeb

  • Spring

  • 主流框架

  • SpringMVC

  • SpringBoot

  • Java
  • JavaSE
  • 面向对象
2023-02-09
目录

访问性修饰符

# 访问性修饰符

Java 语言提供了很多修饰符,主要分为以下两类:

  • 访问修饰符
  • 非访问修饰符

修饰符用来修饰类、方法或者变量的访问权限或特性,通常放在语句的最前端。

举例:

public class className {
	private boolean myFlag;
	static final double weeks = 9.5;
	protected static final int BOXWIDTH = 42;
	public static void main(String[] arguments) {
	   // 方法体
	}
}
1
2
3
4
5
6
7
8

# 访问修饰符介绍

访问控制修饰符,也叫可见性修饰符。

可见性修饰符的作用:可以用于确定一个类以及它的成员(变量、方法和构造方法)的可见性,即类和成员能否在该类之外被访问。

注意,可见性修饰符是限制其他类访问本类的权限的,但如果是在类里面,成员是可以任意访问其他成员的。

Java 支持 4 种可见性修饰符:public、protected、default(无修饰符,也叫包访问)和 private

每个修饰符的简介:

  • public 修饰符:可以应用在类或类的成员上,表示它们可以被任何其他的类访问
  • protected 修饰符: 只能用于类的成员,对同一包内的类和所有子类可见。
  • default:可以应用在类或类的成员上,只能在同一个包内被访问。
  • private 修饰符:只能用于类的成员上,限定方法和数据域只能在它自己的类中被访问

在局部变量上使用修饰符 public 和 private 都会导致编译错误。

列个表格:

类中成员的修饰符 在同一类内可访问 在同一包内可访问 在子类内可访问 在不同包可访问
public √ √ √ √
protected √ √ √ --
default √ √ -- --
private √
-- -- --

因此,论可见性, 私有 < 默认(无修饰符) < protected < public。我们依次来讲解

# 公有访问修饰符-public

被声明为 public 的类、方法、构造方法和接口能够被任何其他类访问。但是如果几个相互访问的 public 类分布在不用的包中,则需要导入相应 public 类所在的包。

另外还有一些注意点:

  1. Java 程序的 main()方法必须设置成公有的,否则,Java 解释器将不能运行该类。
  2. 一个 .java 文件中,一定得有一个 public 的类,并且类名和文件名相同。
  3. 使用 public 修饰的类,其所有的公有方法和变量都能被其子类继承。
  4. public可以用在类、变量、方法和构造方法上,但不能在局部变量上使用。

# 受保护的访问修饰符-protected

被声明为 protected 的变量、方法和构造器能被同一个包中的任何其他类访问,也能够被不同包中的子类访问,但其他不相关的类不能访问。

protected 访问修饰符不能修饰类和接口,方法和成员变量能够声明为 protected,但是接口的成员变量和成员方法不能声明为 protected。

下面的父类使用了 protected 访问修饰符,子类重载了父类的 openSpeaker()方法。

class AudioPlayer {
   protected boolean openSpeaker(Speaker sp) {
      // 实现细节
   }
}

class StreamingAudioPlayer extends AudioPlayer {
   boolean openSpeaker(Speaker sp) {
      // 实现细节
   }
}
1
2
3
4
5
6
7
8
9
10
11

# 默认修饰符-default

不使用任何关键字,就是使用默认访问修饰符,变量和方法对同一个包内的类是可见的。

如下例所示,变量和方法的声明可以不使用任何修饰符。

String version = "1.5.1";
boolean processOrder() {
   return true;
}
1
2
3
4

注意:即使是在不使用修饰符的情况下,接口里的变量都隐式声明为 public static final,接口里的方法默认情况下访问权限为 public。

# 私有访问修饰符-private

私有访问修饰符是最严格的访问级别,所以被声明为 private 的方法、变量和构造方法只能被所属类访问,注意类和接口不能声明为 private。

声明为私有访问类型的变量只能通过类中公共的 getter 方法被外部类访问。

private 访问修饰符的使用主要用来隐藏类的实现细节和保护类的数据。

# 继承与访问性

有时候,子类想要修改继承的方法的可访问性,但也不是随便都能修改的,有一个原则:子类不能削弱父类中定义的方法的可访问性。举例来说就是:

  • 如果一个方法在父类中定义为 public, 在子类中也必须定义为 public。
  • 父类中声明为 protected 的方法在子类中要么声明为 protected,要么声明为 public,但不能声明为 private。
  • 父类中默认修饰符声明的方法,能够在子类中声明为 private。
  • 父类中声明为 private 的方法,不能够被继承。

# 小结

本文介绍了 Java 中的用于控制可访问性的修饰符,共 4 个,并依次介绍了它们的特点,最后介绍了继承和访问性的注意点。

可访问性修饰符是非常基础重要的概念,请读者务必牢记。

上次更新: 2024/9/30 20:09:39
接口
非访问性修饰符

← 接口 非访问性修饰符→

最近更新
01
语雀文档一键下载至本地教程
07-04
02
要成功,就不要低估环境对你的影响
07-03
03
血泪教训:电子设备要定期开机
07-02
更多文章>
Theme by Vdoing | Copyright © 2022-2025 | 粤 ICP 备 2022067627 号 -1 | 粤公网安备 44011302003646 号 | 点击查看十年之约
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式