JAVA零基础小白自学日志——第二十三天

文章目录

  • 1.访问范围权限关键字
  • 2.private(私有)
  • 3.default(默认)
  • 4.protected(受保护的)
  • 5.public(公共)

今日摘要:再谈访问范围

1.访问范围权限关键字

项目同一个类同一个包子类全部
private(私有)
default(默认)
protected(受保护的)✔(对象必须存在于继承状态下)
public(公共)

2.private(私有)

建立一个范围类(ClassPermission)用来测试访问范围控制

package com.hf.hw.beginnerjourna.one;//范围类
public class ClassPermission {//建立一个范围类用来测试访问范围控制//属性private int x;//用private(私有)修饰变量x//方法public void outPut() {//建立一个应用私有变量x的方法this.x = 20;System.out.println("同一个类内调用private私有变量x: " + this.x);}//end outPut()
}//end ClassPermission

建立一个范围类(ClassPermission)的同包子类(PrivatePermission)

package com.hf.hw.beginnerjourna.one;//范围类的同包子类
public class PrivatePermission extends ClassPermission {public void outPut02() {ClassPermission cp = new ClassPermission();
//		cp.x = 10;	//在这里提示变量不可见System.out.println("这是同包下子类的输出");cp.outPut();	}//end outPut02
}//end PrivatePermission

建立一个同包测试类(Test00),以便输出结果

package com.hf.hw.beginnerjourna.one;//测试类
public class Test00 {public static void main(String[] args) {ClassPermission pr = new ClassPermission();pr.outPut();
//		pr.x = 30; //在这里提示变量不可见PrivatePermission pr2 = new PrivatePermission();pr2.output02();}//end main
}//end Test00

屏蔽掉两条错误代码后的输出结果:

同一个类内调用private私有变量x: 20
这是同包下子类的输出
同一个类内调用private私有变量x: 20

总结一下:
当我们在类public class ClassPermission{}中定义了一个私有的整型变量“x”private int x; 这个变量在定义它的类中,可以在成员内直接调用,但是却无法在同一个包下不同类中(包括它的子类)调用,调用的结果就是提示这个变量不可见,从这点就可以很明确的看出private(私有)的访问范围仅限于定义它的那个类

3.default(默认)

建立一个属于com.hf.hw.beginnerjourna.one包的范围类(ClassPermission)用来测试访问范围控制

package com.hf.hw.beginnerjourna.one;//范围类
public class ClassPermission {// 属性int x;//default默认,不要写修饰词,写了会报错// 方法public void outPut() {x = 20;System.out.println("同一个类内调用default默认变量x: " + this.x);}
}

建立一个范围类(ClassPermission)的同属com.hf.hw.beginnerjourna.one包的子类(DefaultPermission)

package com.hf.hw.beginnerjourna.one;public class DefaultPermission extends ClassPermission {public void output02() {ClassPermission cp = new ClassPermission();System.out.println("这是同包下子类调用父类default默认变量x: " + cp.x);cp.outPut();				}
}

建立一个同属com.hf.hw.beginnerjourna.one包的测试类(Test00),以便输出结果

package com.hf.hw.beginnerjourna.one;//测试类
public class Test00 {public static void main(String[] args) {ClassPermission pr = new ClassPermission();pr.outPut();System.out.println("这是同包下不同类调用default默认变量x: "+ pr.x);DefaultPermission pr2 = new DefaultPermission();pr2.output02();}
}

同包下的测试结果输出

同一个类内调用default默认变量x: 20
这是同包下不同类调用default默认变量x: 20
这是同包下子类调用父类default默认变量x: 0
同一个类内调用default默认变量x: 20

下面来看不同包下的情况:
建立一个与范围类(ClassPermission)的不同包的子类(DefaultPermission),此子类属于com.hf.hw.beginnerjourna.two包

package com.hf.hw.beginnerjourna.two;import com.hf.hw.beginnerjourna.one.ClassPermission;public class DefaultPermission extends ClassPermission {public void output02() {ClassPermission cp = new ClassPermission();		
//		System.out.println("这是不同包下子类调用父类default默认变量x: " + cp.x);cp.outPut();				}
}

建立一个属于com.hf.hw.beginnerjourna.two包的测试类(Test01),以便输出结果

package com.hf.hw.beginnerjourna.two;import com.hf.hw.beginnerjourna.one.ClassPermission;public class Test01 {public static void main(String[] args) {ClassPermission pr = new ClassPermission();pr.outPut();
//		System.out.println("这是不同包下不同类调用default默认变量x: "+ pr.x);}
}

后面这两个属于com.hf.hw.beginnerjourna.two包的类和子类,均不能调用com.hf.hw.beginnerjourna.one保内public class ClassPermission{}定义的默认(default)变量“x”,int x; 由此可见default(默认)访问范围,仅限于含有定义这个属性或方法的那个类所处的包内

4.protected(受保护的)

建立一个属于com.hf.hw.beginnerjourna.one包的范围类(ClassPermission)用来测试访问范围控制

package com.hf.hw.beginnerjourna.one;//范围类
public class ClassPermission {// 属性protected int x = 100;// 方法public void outPut() {x = 20;System.out.println("同一个类内调用protected修饰的受保护变量x: " + this.x);}
}

建立一个范围类(ClassPermission)的同属com.hf.hw.beginnerjourna.one包的子类(ProtectedPermission)

package com.hf.hw.beginnerjourna.one;public class ProtectedPermission extends ClassPermission {public void output02() {ClassPermission cp = new ClassPermission();System.out.println("这是同包下子类调用父类protected修饰的受保护变量x: " + cp.x);cp.outPut();ProtectedPermission cpp = new ProtectedPermission();cpp.x = 60;System.out.println("这是同包下子类继承关系调用父类protected修饰的受保护变量x: " + cpp.x);}
}

建立一个同属com.hf.hw.beginnerjourna.one包的测试类(Test00),以便输出结果

package com.hf.hw.beginnerjourna.one;//测试类
public class Test00 {public static void main(String[] args) {ClassPermission pr = new ClassPermission();pr.outPut();System.out.println("这是同包下同一个类调用protected修饰的受保护变量x: "+ pr.x);ProtectedPermission pr2 = new ProtectedPermission();pr2.output02();}
}

同包下输出结果

同一个类内调用protected修饰的受保护变量x: 20
这是同包下同一个类调用protected修饰的受保护变量x: 20
这是同包下子类调用父类protected修饰的受保护变量x: 100
同一个类内调用protected修饰的受保护变量x: 20
这是同包下子类继承关系调用父类protected修饰的受保护变量x: 60

下面是不同包子类的调用结果
建立一个与范围类(ClassPermission)的不同包的子类(ProtectedPermission),此子类属于com.hf.hw.beginnerjourna.two包

package com.hf.hw.beginnerjourna.two;import com.hf.hw.beginnerjourna.one.ClassPermission;public class ProtectedPermission extends ClassPermission {public static void main(String[] args)  {ClassPermission pr = new ClassPermission();
//		pr.x = 20;ProtectedPermission cp = new ProtectedPermission();System.out.println("这是不同包下子类继承关系调用父类protected修饰的受保护变量x: " + cp.x);				}
}

屏蔽掉错误语句后的输出结果

这是不同包下子类继承关系调用父类protected修饰的受保护变量x: 100

从以上运行结果不难看出,在同包中protected修饰和default修饰的变量访问结果是相同的,但是在不同包中,子类可以通过继承调用不同包中父类被protected修饰过的变量,这里需要强调的是,通过继承才可以调用,不能直接调用

5.public(公共)

这个就没有什么好说的了,不用看代码大家也都能明白,这个谁都可以访问,无论同包不同包,只要导包了,就能访问;

明天我们继续讨论访问范围,不过不是范围修饰词所管理的范围,而是内部类

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

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

相关文章

Linux环境安装KubeSphere容器云平台并实现远程访问Web UI 界面

文章目录 前言1. 部署KubeSphere2. 本地测试访问3. Linux 安装Cpolar4. 配置KubeSphere公网访问地址5. 公网远程访问KubeSphere6. 固定KubeSphere公网地址 前言 本文主要介绍如何在Linux CentOS搭建KubeSphere并结合Cpolar内网穿透工具,实现远程访问,根…

HTTP请求入参类型解读

HTTP请求入参类型解读 Content-Type 在HTTP请求中,Content-Type请求头用于指示资源的MIME类型,即请求体的媒体类型。它告诉服务器实际发送的数据类型是什么,以便服务器能够正确地解析和处理这些数据。Content-Type可以有多种值,…

服务器怎样减少带宽消耗的问题?

择业在使用服务器的过程中会消耗大量的带宽资源,而减少服务器的带宽消耗则可以帮助企业降低经济成本,同时还能够提高用户的访问速度,那么服务器怎样能减少带宽的消耗呢?本文就来带领大家一起来探讨一下吧! 企业可以选择…

详解建造者(builder)模式的创建对象使用方式

目录 抽象类代码导入依赖Pizza类Topping 枚举成员变量内部抽象类 BuilderBuilder 类的成员变量addTopping 方法:build 方法:self 方法:Pizza 类的构造函数: 实现类代码1. 导入Objects类2. NyPizza类3. Calzone类递归泛型类型stati…

C++ 类型转换 包括C风格的转换、static_cast、const_cast、reinterpret_cast、dynamic_cast、模板特化等

C 类型转换 包括C风格的转换、static_cast、const_cast、reinterpret_cast、dynamic_cast、模板特化等 flyfish 0. 隐式转换(Implicit Conversions) 隐式转换是编译器自动进行的类型转换,通常在需要将一个类型转换为另一个类型以匹配函数参…

kafka架构+原理+源码

1.安装jdk17 sudo yum -y update sudo wget https://download.oracle.com/java/17/latest/jdk-17_linux-x64_bin.rpm sudo yum -y install ./jdk-17_linux-x64_bin.rpm、 sudo java -version 2.安装kafka How to easily install kafka without zookeeper | Aditya’s Blog …

负载均衡工具haproxy完整安装部署流程 及 haproxy通过域名匹配进行负载-基于域名负载均衡的Haproxy配置

一、负载均衡工具haproxy完整安装部署流程 1. 关于负载均衡和haproxy 负载均衡是系统设计最常见的一种方式,Nginx、HAProxy、LVS、F5用得比较普遍,不过Nginx只能在HTTP层负载,而HAProxy即可以在7层做负载,也可以在4层做负载&…

一文了解AOL算子加速库

过去一年,随着ChatGPT的发布与快速迭代,基于大数据量、大参数量、大算力的预训练大模型已成为人工智能产业的主要路线。大模型的普及与发展不仅依靠模型本身的创新,更依赖于算力底座的支撑以及软件生态的繁荣,需要伙伴和开发者的积…

Vue3逻辑复用及内置组件

Vue3的逻辑复用主要通过“组合式函数”、“自定义指令”及“插件”来实现。提高了代码复用性,增强代码可维护性及促进团队合作。 1 逻辑复用 1.1 组合式函数 利用Vue组合式API来封装和复用有状态逻辑的函数。对组合式函数有如下约定: 命名&#xff0…

Sentinel限流规则详解

上一期教程讲解了 Sentinel 的快速入门:Sentinel快速入门,这一期主要讲述 Sentinel 的限流规则 簇点链路 簇点链路就是项目内的调用链路(Controller -> Service -> Mapper),链路中被监控的每个接口就是一个资源…

wkhtmltopdf 工具安装与使用

前情提要: 最近一个同事请叫我一个问题,他发现一片不错的博文,是在博客园的,但是不能下载这篇文章,我看了一下才发现,原来csdn也是不行的。合理。毕竟是人家辛苦写的文章,不能就这么被别人随便c…

动态多态——java

多态(Polymorphism)是面向对象编程(OOP)的一个核心概念,它允许一个接口被多个类实现,从而使得一个方法调用可以根据对象的实际类型表现出不同的行为。多态性提高了代码的灵活性和可扩展性。 多态的类型 编译…

机器学习中的预测:真的是预测吗?

预测 机器学习中的预测:真的是预测吗?预测的定义为什么预测需要X?传统预测与机器学习预测的对比未来的预测模型:向自动生成输入的方向发展结论 机器学习中的预测:真的是预测吗? 在探讨机器学习中的“预测”…

《Java初阶数据结构》----7.<优先级队列PriorityQueue>

前言 大家好,我目前在学习java。之前也学了一段时间,但是没有发布博客。时间过的真的很快。我会利用好这个暑假,来复习之前学过的内容,并整理好之前写过的博客进行发布。如果博客中有错误或者没有读懂的地方。热烈欢迎大家在评论区…

[渗透测试] 主动信息收集

主动信息收集 在红蓝对抗过程中,资产属于核心地位,攻击方(红方)要尽可能的去获取对方资产,暴露目标资产,包括IP地址、网络设备、安全设备、服务器、存储在服务器中的数据等。防守方也要清楚自己有多少有价…

宝塔SSL续签失败

我有2个网站a和b(文字中用baidu.com替换我的域名) b是要续签那个,但续签报错: nginx version: nginx/1.22.1 nginx: [emerg] host not found in upstream "github.com" in /www/server/panel/vhost/nginx/proxy/a.bai…

设计模式--创建型

实现 #include <iostream> #include <memory>// 抽象产品类 class Product {public:virtual ~Product() {}virtual void Operation() const 0; };// 具体产品 类A class ConcreteProductA : public Product {public:virtual void Operation() const override {st…

个人电脑网络安全 之 防浏览器和端口溢出攻击 和 权限对系统的重要性

防浏览器和端口溢出攻击 该如何防 很多人都不明白 我相信很多人只知道杀毒软件 却不知道网络防火墙 防火墙分两种 &#xff1a; 1、 病毒防火墙 也就是我们说的杀毒软件 2、 网络防火墙 这是用来防软件恶意通信的 使用防火墙 有两种 1、 半开式规则…

ESP-01S、ESP8266、ESP32等模块通信乱码的排查方法

ESP-01S、ESP8266、ESP32等模块通信乱码的排查方法 ESP-01S模块 遇到问题首先按重要顺序及排除法来解决问题 1&#xff0c;你的USB转串口工具是否有问题&#xff1f; 请将TXD与RXD短接在一起进行测试&#xff0c;自收自发应该是正常的&#xff0c;请确保这点。 ESP-01S的串口…

ffmpeg ffplay.c 源码分析二:数据读取线程

本章主要是分析 数据读取线程read_thread 中的工作。如上图红色框框的部分 从ffplay框架分析我们可以看到&#xff0c;ffplay有专⻔的线程read_thread()读取数据&#xff0c; 且在调⽤av_read_frame 读取数据包之前需要做&#xff1a; 1.例如打开⽂件&#xff0c; 2.查找配置解…