Java——访问修饰符

一、访问修饰符是什么

Java中的访问修饰符用于控制类、接口、构造函数、方法和数据成员(字段)的可见性和访问级别。

Java提供了四种访问修饰符:

访问修饰符同一类内同一包内不同包的子类不同包的非子类适用对象
public可见可见可见可见类、接口、变量、方法
protected可见可见可见不可见变量、方法
默认可见可见不可见不可见类、接口、变量、方法
private可见不可见不可见不可见变量、方法

二、访问修饰符详细介绍

对于访问修饰符修饰变量和修饰方法(包括构造器)的可访问情况都是一致的,我们下面以每个访问修饰符修饰成员变量作为例子。

1、public

  • 访问权限:最高,可以被任何其他类访问。
  • 适用范围:类、接口、构造器、方法和字段。

com.pack2 包中:

package com.pack2;

public class Example {

	//public 修饰字段(成员变量),以此为例
	public int publicVar;

	public void example() {
		System.out.println(publicVar);//同一个类中可以访问 publicVar
	}
}
package com.pack2;

public class SamePackage {
	public Example e = new Example();

	public void show() {
		System.out.println(e.publicVar);//可以在同一个包中被访问 publicVar
	}
}

这里可以看到同一类中可以访问 public 修饰的成员变量,同一个包中可以访问 public 修饰的成员变量。 

com.pcak1 包中:

package com.pack1;

import com.pack2.Example;

public class NotSamePackNotSubclass {
	public static void main(String[] args) {
		Example e1 = new Example();
		System.out.println(e1.publicVar);//在不同包的非子类中访问 publicVar
	}
}
package com.pack1;

import com.pack2.Example;

public class Subclass extends Example {

	public void foo() {
		System.out.println(publicVar);//在不同包的子类中访问 publicVar
	}
}

这里可以看到在不同包的非子类和子类中都可以访问到 public 修饰的成员变量。

2、protected

  • 访问权限:可以被同一个包中的任何类访问,以及不同包中的子类访问。不能被不同包的非子类访问。
  • 适用范围:构造函数、方法和字段。

com.pack2 包中:

package com.pack2;

public class Example {
	//protected 修饰的成员变量
	protected int protectedVar;
	
	public void show() {
		System.out.println(protectedVar);//同一个类中可以访问 protectedVar
	}
}
package com.pack2;

public class SamePackage {
	Example example = new Example();

	public void show() {
		System.out.println(example.protectedVar);//同一个包中可以访问 protectedVar
	}
}

可以看到这里 protected 修饰的成员变量可以在同一个类中和同一个包中访问。

com.pcak1 包中:

package com.pack1;

import com.pack2.Example;

public class NotSamePackNotSubclass {
    public static void main(String[] args) {
        Example example = new Example();
        //System.out.println(example.protectedVar);//不同包的非子类不能访问 protectedVar
        //这里会报错
    }
}

可以发现这里 protected 修饰的成员变量不能在不同包的非子类中访问。这里会报以下错:

但是在子类中就可以访问,就像下面:

package com.pack1;

import com.pack2.Example;

public class Subclass extends Example{
	public void show() {
		System.out.println(protectedVar);//不同包的子类可以访问 protectedVar
	}
}

可以发现 protected 修饰的成员变量可以在不同包的子类中被访问。

3、默认(没有访问修饰符)

  • 访问权限:可以被同一个包中的任何类访问,但不能被不同包中的类访问。
  • 适用范围:类、接口、构造函数、方法和字段。

com.pack2 包中:

package com.pack2;

public class Example {
	//无修饰(默认)的成员变量
	int defaultVar;

	public void show() {
		System.out.println(defaultVar);//同一个类中可以访问 defaultVar
	}
}
package com.pack2;

public class SamePackage {
	Example example = new Example();

	public void show() {
		System.out.println(example.defaultVar);//同一个包中可以访问 defaultVar
	}
}

可以发现默认的访问权限(没有访问修饰符)的成员变量可以在同一个类中访问,也可以在同一个包中访问。

com.pcak1 包中:

package com.pack1;

import com.pack2.Example;

public class NotSamePackNotSubclass {
	public static void main(String[] args) {
		Example example = new Example();
		//System.out.println(example.defaultVar);//不同包的非子类不能访问 defaultVar
		//这里会报错
	}
}

可以发现默认访问权限(没有访问修饰符)的成员变量不能在不同包的非子类中访问。这里会报错:

package com.pack1;

import com.pack2.Example;

public class Subclass extends Example{
	public void show() {
		//System.out.println(defaultVar);//不同包的子类不能访问 defaultVar
		//这里会报错
	}
}

可以发现默认访问权限(没有访问修饰符)的成员变量不能在不同包的子类中访问。这里会报错:

4、private

  • 访问权限:最低,只能被定义它的类内部访问。
  • 适用范围:构造函数、方法和字段。

com.pack2 包中:

package com.pack2;

public class Example {
	//private 修饰的成员变量
	private int privateVar;

	public void show() {
		System.out.println(privateVar);//同一个类中可以访问 privateVar
	}
}

可以发现 private 修饰的成员变量只能在同一个类中被访问。

package com.pack2;

public class SamePackage {
	Example example = new Example();

	public void show() {
		//System.out.println(example.privateVar);//同一个包中不能访问 privateVar
		//这里会报错
	}
}

可以发现 private 修饰的成员变量不能在同一个包中被访问。这里会报错:

com.pcak1 包中:

package com.pack1;

import com.pack2.Example;

public class NotSamePackNotSubclass {
	public static void main(String[] args) {
		Example example = new Example();
		//System.out.println(example.privateVar);//不同包的非子类不能访问 privateVar
		//这里会报错
	}
}

可以发现 private 修饰的成员变量不能在不同包的非子类中被访问。这里会报错:

package com.pack1;

import com.pack2.Example;

public class Subclass extends Example{
	public void show() {
		//System.out.println(privateVar);//不同包的子类不能访问 privateVar
		//这里会报错
	}
}

可以发现 private 修饰的成员变量不能在不同包的子类中被访问。这里会报错:

三、补充

1、适用范围

我们在文章最开始就给出了这个表格:

这里标出了这四个访问修饰符的适用对象。

对于 public 默认(什么都不写)是适用于类、接口、成员变量和成员方法的。

但是对于 protected private 是只能用于成员变量和成员方法的,不能用于类和接口。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

卫士通电科网安安全IpSec网关Ukey开发对接

官方公开的开发文档,有几个坑,着重说一下踩坑的记录过程。 1、通过官方的客户端接口模拟程序获取前端参数:随机数和token 2、java程序调用官方sdk,postman请求测试: 3、贴出关键的java集成类: import cn.h…

国产AI之光!KIMI大模型详细使用入门指南(非常详细)零基础入门到精通,收藏这一篇就够了

在目前的AI大模型领域,OpenAI公司开发的Chat-GPT毫无疑问是领头羊,但其使用有着众所周知的限制条件。 提到国产AI大模型,热度最高的毫无疑问就是月之暗面公司训练的KIMI大模型,堪称国产AI之光,也是我本人高频使用的两…

Matplotlib绘制一个X轴2个Y轴的图表

import matplotlib matplotlib.use(Agg) # 使用Agg后端,这个后端适用于生成图像文件但不显示它们 import matplotlib.pyplot as plt fig plt.figure(figsize(15, 8))# 字体使用楷体 matplotlib.rc("font", family"Microsoft YaHei") ax1 fig…

Nginx 负载均衡实现上游服务健康检查

Nginx 负载均衡实现上游服务健康检查 Author:Arsen Date:2024/06/20 目录 Nginx 负载均衡实现上游服务健康检查 前言一、Nginx 部署并新增模块二、健康检查配置2.1 准备 nodeJS 应用程序2.2 Nginx 配置负载均衡健康检查 小结 前言 如果你使用云负载均衡…

七连发吴谨言专访揭秘

七连发!吴谨言专访揭秘,薛芳菲魅力再升级在娱乐圈的繁星中,总有那么一些独特的光芒,她们用才华和魅力照亮前行的道路。近日,备受瞩目的“六公主”平台连续发布了七条关于吴谨言的专访,引发了广大网友的热烈…

常微分方程算法之编程示例一(欧拉法)

目录 一、研究问题 二、C代码 三、计算结果 一、研究问题 前面几节内容介绍了常微分方程有限差分格式的推导。为加强对本专栏知识的理解,从本节开始,我们补充一些具体算例及相应的编程。 欧拉法的原理及推导请参考: 常微分方程算法之欧拉…

NXP i.MX8系列平台开发讲解 - 3.15 Linux 之USB子系统(一)

专栏文章目录传送门:返回专栏目录 Hi, 我是你们的老朋友,主要专注于嵌入式软件开发,有兴趣不要忘记点击关注【码思途远】 目录 Linux 之USB子系统(一) 1. USB基础简介 1.1 USB的传输模式 1.2 USB 的设备描述符 1.3 USB 类的定义分类 2…

不在枯燥用第三方库简化你的编程之路

简介: Python作为一种多用途的编程语言,得益于其丰富的第三方库和框架,极大地拓展了其功能和应用领域.这些工具不仅提升了开发效率,也使得Python在各个领域展现出色的表现. 今天我们就来聊一聊Python 第三方库是由第三方开发者编写并共享的库,可用于扩展 Python 的…

深度剖析现阶段的多模态大模型做不了医疗

导读 在人工智能的这波浪潮中,以ChatGPT为首的大语言模型(LLM)不仅在自然语言处理(NLP)领域掀起了一场技术革命,更是在计算机视觉(CV)乃至多模态领域展现出了令人瞩目的潜力。 这些…

X86+FPGA, NXP+FPGA:工控稳“固”之选 赋能CPCI/VPX智能轨交新变革

工业IPC在目前大时代背景下面临机遇,但挑战同样也不少。在轨道交通领域,工控机必须具备高可靠性和稳定性,能够在复杂且严苛的工作环境中长时间无故障运行;需要满足严格的实时性和响应性能要求,确保能够迅速准确地处理传感器信号和…

【C++】类的六个默认成员函数

文章目录 类的六个默认成员函数一、构造函数二、析构函数三、拷贝构造函数四、赋值运算符重载五、const成员六、取地址及const取地址操作符重载 类的六个默认成员函数 如果一个类中什么成员都没有,称为空类。空类中真的什么都没有吗?并不是,…

Nvidia Isaac Sim组装机器人和添加传感器 入门教程 2024(5)

Nvidia Isaac Sim 入门教程 2024 版权信息 Copyright 2023-2024 Herman YeAuromix. All rights reserved.This course and all of its associated content, including but not limited to text, images, videos, and any other materials, are protected by copyright law. …

AI穿戴设备是未来手机的终结者?中国AI商业化的未来预测

AI技术的发展正处于商业化应用的关键阶段,而中国在互联网时代已凭借商业化应用逆袭。AI算法大模型虽强大,但真正普惠民众需与设备深度结合。穿戴式智能设备就成为了新战场,AI算法与穿戴设备结合能释放更大工作效率。私人助理AI将成趋势&#…

如何使用k8s安装nexus3呢

百度云盘地址 链接:https://pan.baidu.com/s/1YN1qc2RvzTU3Ba6L_zCTdg?pwd5z1i 提取码:5z1i 下载后上传到本地服务器 docker load -i nexus3 创建 nexus-deployment.yaml apiVersion: apps/v1 kind: Deployment metadata:name: nexus3-deployment spec…

我的Mac疯了!居然可以生成这样的奇葩AI图片!

在当今人工智能领域,midjourney无疑是生成图片的王者,但是苦于付费才能使用,今天我就给大家分享一下midjourney平替stable diffusion,实现本地生成不逊色于midjourney的图片 效果图 先上一个我自己生成的效果(就是在我的Mac上用C…

DPDK与传统收发报文的区别

1.去除中断 传统的收发报文方式都必须采用硬中断来做通讯,每次硬中断大约消耗100微秒,这还不算因为终止上下文所带来的Cache Miss。 DPDK采用轮询模式驱动(PMD)。 PMD由用户空间的特定的驱动程序提供的API组成,用于对设备和它们相应的…

暴雨讲堂|通往AGI的必由之路—AI agent是什么?

在三月份英伟达的新品发布会上,黄仁勋反复提及一个词汇— Generalist Embodied Agent,意为“通用具身智能体”,给观众留下了深刻的印象。其实具身智能指的是不同形态的拥有主动感知交互能力的机器人。其实,业界对它还有一个更为熟…

[Vulnhub] Troll FTP匿名登录+定时任务权限提升

信息收集 IP AddressPorts Opening192.168.8.104TCP:21,22,80 $ nmap -sC -sV 192.168.8.104 -p- --min-rate 1000 Nmap scan report for 192.168.8.104 (192.168.8.104) Host is up (0.0042s latency). Not shown: 65532 closed tcp ports (conn-refused) PORT STATE SER…

php基础语法_面向对象

PHP php代码标记 多种标记来区分php脚本 ASP标记&#xff1a;<% php代码 %> 短标记&#xff1a; 脚本标记: 标准标记&#xff08;常用&#xff09;&#xff1a; 简写风格&#xff1a; ASP风格&#xff1a;<% php代码 %> 注意&#xff1a;简写风格和ASP风格…

VisualBox 虚拟机 Ubunut 18.04 在大显示器上黑屏的问题

在小屏幕上显示没有问题&#xff0c;但是移动到大显示器上就黑屏了&#xff0c;并且不能铺满&#xff0c;如下所示 如果我希望它铺满整个屏幕&#xff0c;如何解决呢&#xff1f; 下面是解决方法&#xff1a; 虚拟机底部这个按钮&#xff0c;右键 产生菜单&#xff0c;按这个选…