JAVA里protected属性和方法的完整测试

2024年Java接口测试实战指南:从RestAssured到Testcontainers的完整框架搭建 接口测试是软件工程中验证系统组件间交互契约的核心实践,其原理在于通过模拟客户端请求来验证服务端API的响应、数据格式和性能是否符合预期。这一技术对于保障微服务架构下的系统稳定性和团队协作效率具有关键价值,广泛应用于持续集成、服务虚拟化和契约驱动开发等场景。在Java生态中,RestAssured凭借其声明式DSL成为RESTful API测试的事实标准,而Testcontainers则通过提供真实的、容器化的依赖环境,彻底改变了集成测试的范式。本文聚焦于如何将RestAssured与Testcontaine 阅读详情
原文地址: http://www.java2000.net/p10841

先说几个protected的使用原则,后面再看对应的例子。
  1. protected 的属性和方法可以在本包和子类访问
  2. 非同包的子类里面,不能直接使用父类,或者其它包的子类访问
我们看代码,这个是基类
  1. package test.base;
  2. /**
  3.  * 基类,属性和方法都是protected的。
  4.  *
  5.  * @author 赵学庆,Java世纪网(java2000.net)
  6.  *
  7.  */
  8. public class Base {
  9.   protected int testInt;
  10.   public int publicInt;
  11.   protected int getTestInt() {
  12.     return testInt;
  13.   }
  14. }


下面是2个同一个包的测试代码,一个是普通类,1个是子类。
  1. package test.base;
  2. /**
  3.  * 测试相同包的子类。
  4.  *
  5.  * @author 赵学庆,Java世纪网(java2000.net)
  6.  *
  7.  */
  8. public class TestSamePackageSubClass extends Base {
  9.   public void test() {
  10.     Base b = new Base(); // 使用基类
  11.     b.publicInt = 0; // 可以访问
  12.     b.testInt = 1; // 访问protected的属性成功
  13.     b.getTestInt(); // 访问protected的方法成功
  14.   }
  15.   public void test2() {
  16.     publicInt = 0; // 可以访问
  17.     testInt = 2; // 子类中可以直接用父类的属性
  18.     getTestInt(); // 子类中可以直接用父类的方法
  19.   }
  20. }

  1. package test.base;
  2. /**
  3.  * 测试相同包的普通类。
  4.  *
  5.  * @author 赵学庆,Java世纪网(java2000.net)
  6.  *
  7.  */
  8. public class TestSamePackageNormal {
  9.   public void test() {
  10.     Base b = new Base(); // 使用基类
  11.     b.publicInt = 0; // 可以访问
  12.     b.testInt = 1; // 访问protected的属性成功
  13.     b.getTestInt(); // 访问protected的方法成功
  14.   }
  15. }



下面是不同包的普通类和子类测试,一个普通类,2个子类
  1. package test.sub1;
  2. import test.base.Base;
  3. /**
  4.  * 不同包的正常类。
  5.  *
  6.  * @author 赵学庆,Java世纪网(java2000.net)
  7.  *
  8.  */
  9. class TestOtherPackageNormal {
  10.   public void test() {
  11.     Base b = new Base(); // 使用基类
  12.     b.publicInt = 0; // 可以访问
  13.     b.testInt = 1; // 访问protected的属性-失败
  14.     b.getTestInt(); // 访问protected的方法-失败
  15.   }
  16.   public void test3() {
  17.     TestOtherPackageSubClass b = new TestOtherPackageSubClass();
  18.     b.publicInt = 0; // 可以访问
  19.     b.testInt = 3; // 直接访问属性-失败
  20.     b.getTestInt(); // 直接访问方法-失败
  21.   }
  22. }
  1. package test.sub1;
  2. import test.base.Base;
  3. import test.sub2.TestOtherPackage2SubClass;
  4. /**
  5.  * 不同包的子类1.
  6.  *
  7.  * @author 赵学庆,Java世纪网(java2000.net)
  8.  *
  9.  */
  10. class TestOtherPackageSubClass extends Base {
  11.   public void test() {
  12.     Base b = new Base(); // 使用基类
  13.     b.publicInt = 0; // 可以访问
  14.     b.testInt = 1; // 访问protected的属性失败
  15.     b.getTestInt(); // 访问protected的方法失败
  16.   }
  17.   public void test2() {
  18.     publicInt = 0; // 可以访问
  19.     testInt = 2; // 直接用父类的属性-成功
  20.     getTestInt(); // 直接用父类的方法-成功
  21.   }
  22.   public void test3() {
  23.     // 用另外一个package的子类。
  24.     TestOtherPackageSubClass2 b = new TestOtherPackageSubClass2();
  25.     b.publicInt = 0; // 可以访问
  26.     b.testInt = 1; // 访问protected的属性-失败
  27.     b.getTestInt(); // 访问protected的方法-失败
  28.   }
  29.   public void test4() {
  30.     // 用另外一个package的子类。
  31.     TestOtherPackage2SubClass b = new TestOtherPackage2SubClass();
  32.     b.publicInt = 0; // 可以访问
  33.     b.testInt = 1; // 访问protected的属性-失败
  34.     b.getTestInt(); // 访问protected的方法-失败
  35.   }
  36. }
  1. package test.sub1;
  2. import test.base.Base;
  3. /**
  4.  * 不同包的子类2.
  5.  *
  6.  * @author 赵学庆,Java世纪网(java2000.net)
  7.  *
  8.  */
  9. class TestOtherPackageSubClass2 extends Base {
  10. }


另一个不同包的子类
  1. package test.sub2;
  2. import test.base.Base;
  3. /**
  4.  * 另一个不同包的子类。
  5.  *
  6.  * @author 赵学庆,Java世纪网(java2000.net)
  7.  *
  8.  */
  9. public class TestOtherPackage2SubClass extends Base {
  10. }


总结一下:
  1. 公共属性总能访问,呵呵,这个不用说了
  2. 同一包的子类,可以任意使用
  3. 同一个包的正常类,可以直接用他的实例进行访问
  4. 不同包的正常类,无法访问任何属性和方法
  5. 不同包的子类,不能使用父类实例的属性和方法
  6. 不同包的子类,不能使用其它包的子类实例的属性和方法
  7. 不同包的子类,可以直接使用父类的属性和方法
总之,不同包的子类就规规矩矩的在自己的代码里用父类的属性就行了。其它的使用都是不允许的。

Java UI自动化测试实战:从框架搭建到CI/CD集成的完整指南 UI自动化测试是软件质量保障的关键环节,其核心原理是通过模拟用户操作来验证Web应用的功能与交互。在技术选型中,基于Java的解决方案因其强类型、面向对象的特性,能够构建出结构清晰、易于维护的测试代码,尤其适合大型企业级项目。其技术价值在于能与JUnit、TestNG等成熟测试生态无缝集成,并通过Maven、Gradle等构建工具实现依赖管理和项目标准化。在应用场景上,结合Selenium WebDriver可实现对多浏览器的兼容性测试,而Page Object Model (POM) 设计模式则大幅提升了 阅读详情

相关推荐

JUnit接口测试实战:从Mock对象到契约测试的完整指南

单元测试是保障软件质量的基础实践,其核心在于验证代码单元在隔离环境下的行为是否符合预期。在面向接口编程的架构中,接口作为抽象契约,其测试策略与具体类有所不同,需要借助Mock对象等技术间接验证依赖关系与行为一致性。通过Mockito等框架创建测试替身,可以精准模拟接口行为,从而隔离被测代码、验证交互逻辑并模拟各种边界场景,这对于构建高内聚、低耦合的系统至关重要。本文聚焦于JUnit框架下针对接口类测试的三大核心策略:测试具体实现类以保障功能正确性、测试依赖接口的客户端代码以实现高效隔离、以及通过契约测试确保

weixin_34008933的博客 344

java单元测试技巧

在JUnit 4中,你可以使用expected属性在@Test注解中声明期望的异常类型。

海浮沉的博客 758

第 05 章:一鸣惊人,为Bean对象注入属性和依赖Bean的功能实现

作者:小傅哥 博客:https://bugstack.cn 沉淀、分享、成长,让自己和他人都能有所收获!???? 《Spring 手撸专栏》目录 第 1 章:开篇介绍,我要带你撸 Spring 啦! 第 2 章:小试牛刀,实现一个简单的Bean容器 第 3 章:初显身手,运用设计模式,实现 Bean 的定义、注册、获取 第 4 章:崭露头角,基于Cglib实现含构造函数的类实例化策略 第 5 章:一鸣惊人,为Bean对象注入属性和依赖Bean的功能实现 第 6 章:待归档… 一、前言 超

bugstack虫洞栈 3688

如何测试私有/受保护的方法? (译文)

      1.   简介 Test Driven Development 的步骤是先写测试,然后写代码让测试通过,然后再重构。这些概念在.net环境中由于对软件质量要求的提高,越来越受到重视。测试公有方法是很容易的,自然而然的就有问题产生了“如何测试protected或private方法”?本文包括: l         总结一些测试私有方法的常用做法; ...

weixin_34245082的博客 220

基于8086微机原理数字钟计时器系统设计

*单片机设计介绍,基于8086微机原理数字钟计时器系统设计。

2201_75940997的博客 1282

SAP MIGO屏幕增强的具体实施步骤介绍(SE19:MB_MIGO_BADI) <转载>

1.MIGO抬头屏幕增强具体增强实施步骤1.1.创建存储抬头客制化数据的增强表1.2.创建增强结构1.3.创建函数组ZMM_MIGO1.3.1.定义全局变量1.3.2.创建数据处理函数1.4.创建字屏幕9001屏幕PBOendif.endloop.1.5.实施新BADI增强SE19创建BADI实施双击实施类ZCL_MIGO_EN_01exportingendif.endmethod.endif.endif.exportingendmethod.

qq_55488207的博客 4515

java中的保护(protected)修饰符的理解

java中的保护(protected)修饰符的理解 protected修饰符给出的大部分定义解释都为protected修饰的属性或方法,允许同包下的类和不同包的子类访问。 但是protected修饰的属性,只可以被同包的类访问。这句话的意思就是:子类通过继承,可以在自己类中访问自己的protected属性,但是不能访问异包类的protected字段(即使是自己的超类)。这和大部分给出的定义相违背,因为父类中用protected修饰的属性,如果继承这个类的子类与这个类不在同一个包下,那么子类就不能访问父类中用

xjx666666的博客 1万+

Surface Go 2 变身 Linux 开发本:保姆级 Ubuntu 20.04 双系统安装与驱动配置全攻略

本文详细介绍了如何将 Surface Go 2 变身为高效的 Linux 开发本,涵盖 Ubuntu 20.04 双系统安装、专用内核配置、驱动优化等全流程。通过 linux-surface 内核安装和硬件驱动优化,确保 Surface Go 2 的触控、笔输入、摄像头等功能完美运行,适合开发者打造便携生产力工具。

weixin_30596165的博客 616

测试 Java 类的private和protected变量和方法

参考资料 Dennis Sosnoski 撰写的“Classworking 工具箱”系列。 “Java 编程的动态性”系列:作者是 Dennis Sosnoski,他将带您遍历 Java 类结构、反射和 classworking 等。 阅读李夷磊等撰写的文章“AOP 的

zhangzh332的专栏 2750

CST实战:5分钟搞定圆极化天线轴比分析(含远场设置技巧)

本文提供了一份CST Studio Suite圆极化天线轴比分析的实战指南。文章详细讲解了轴比的概念与工程标准,并重点演示了如何正确设置远场监视器以获取Axial Ratio数据,包括关键步骤与后处理技巧。最后,通过植入式天线在生物组织环境中的案例,分析了复杂环境对轴比性能的影响及优化思路。

nokia的博客 999

FPGA进位链(Carry Chain)实战:从Xilinx CARRY8原语到性能优化全解析

本文深入解析了FPGA进位链(Carry Chain)的原理与应用,重点剖析了Xilinx CARRY8原语的端口功能与内部机制。通过实测数据揭示了进位链的真实延迟特性与温度影响,并详细阐述了如何利用DI和S信号进行动态路径优化、实现减法运算与条件进位选择,从而有效提升设计性能。最后,文章探讨了系统级的流水线拆分、布局约束等实战优化策略与常见陷阱。

weixin_29313817的博客 454

Java访问权限之 protected详解

对于类的成员(包括成员变量和成员方法)而言,其能否被其他类所访问,取决于该成员的修饰词;而对于一个类而言,其能否被其他类所访问,也取决于该类的修饰词。在Java中,类成员访问权限修饰词有四类:private,无(包访问权限),protected 和 public,而其中只有包访问权限和public才能修饰一个类(内部类除外)。由于很多Java书籍对protected可见性的介绍都比较笼统,本文重点说明了protected关键字的可见性内涵。

秦延金 9万+

Openlayers 教程 02 - 地图添加 WKT WKB GeoJson 格式的点线面数据

WebGIS 开发中,对于数据量不是很大的场景,可以直接从数据库读取数据,通过创建点线面要素(Feature),然后添加到矢量图层(vectorLayer)中,在地图上展示。添加点线面的方法可以封装一下,方便使用。...

非科班Java出身GISer的博客 3861

JAVA常用的对象访问属性

JAVA常用的对象访问属性 不得不说,java语言确实细节坑太多,今天遇到的一个坑是单元测试上的坑。还是那个道理,java这么多年了,一切你觉得有问题的东西,最后都能证明是问题在自己身上。 我之前一直是在每个类的最后编写main方法来进行单元测试的。因为我觉得这样不用引入junit的包,也可以立即进行测试,方便很多。但是问题就来了,我今天突然发现竟然可以自由操作private属性的变量。这个我就太...

warden的博客 502

【麒麟系统】Rsync文件复制与同步工具

本文摘要: Rsync是一款Linux/Unix系统标配的高效文件同步工具,支持增量传输、SSH加密、断点续传等核心功能,相比SCP具有显著优势。文章详细解析了Rsync的五种标准语法格式和常用参数组合,重点介绍了本地同步、远程SSH同步(推送/拉取)的实操方法,并提供了密钥免密登录配置方案。针对企业运维场景,还讲解了文件过滤、镜像同步(--delete)、迁移同步(--remove-source-files)、空运行预校验(--dry-run)等高级功能,以及带宽限速等优化技巧,帮助用户安全高效地完成各类

信创运维工程师 · 银河麒麟 & 容器实战 | 金融生产环境迁移·等保加固 | 142篇原创·17万+阅读 999

DAF-Net:动态注意力红外-可见光图像融合

DAF-Net 红外-可见光融合链路:IR/VIS 双分支 (Conv+ResBlock → 64ch) → DynamicAttentionFusion (Cat→Sigmoid→加权) → 重建 (Conv→Sigmoid)。TNO 上 SSIM=0.782 (vs IR), 0.734 (vs VIS), 参数量仅 218K。核心贡献:轻量动态注意力门控, 无监督 SSIM+MSE 损失不需要配准 ground truth。

FJN110的博客 321

JAVA反射获取类名,方法名,属性及构造方法

//定义了个类,随便写了些属性,方法和构造方法 class ReflectTest { private String title; private int num; public String content; protected double income; public ReflectTest() { } private ReflectTest

true100的专栏 2万+

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

跨包子类访问protected权限:必考规则+易错点详解

摘要: Java中protected修饰符在跨包子类中的访问规则是核心考点,需牢记: 允许:子类对象可直接访问自己继承的父类protected成员(如属性/方法),视为自身成员使用。 禁止:子类对象不能通过父类实例(如new 父类().protected成员)访问父类protected成员,否则编译报错。 同包例外:同包下任何类访问protected成员无限制。 案例: 跨包子类Zi中,name(继承属性)可直接使用,但new Fu().name会报错。 同包子类则无此限制。 口诀:跨包子类“自用可,父用错

wentorrihi0818的博客 598

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

封装:使对象的属性尽可能私有,对象的方法尽可能的公开

总结:“使对象的属性尽可能私有,对象的方法尽可能的公开”是面向对象编程中实现封装的一种常见且重要的思路,但在实际应用中需要根据具体的业务需求、类的设计目的以及代码的协作关系等因素,灵活地选择属性和方法的访问权限,以在数据安全、代码可维护性、功能扩展性等方面达到一个良好的平衡。

博客域名:borter.blog.youkuaiyun.com 602

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

Open Battery Information:BMS 锁死电池修复与重置完整指南(免费开源)

电钻电池插上去屏幕全黑,你根本分不清是电芯报废,还是 BMS 在"闹脾气"。很多情况下,只是电池管理板误触发保护,把原本健康的 BMS 给锁死了,而电芯本身还好。Open Battery Information(OBI)就是一个开源的电池修复工具,专门读取这类被锁死的 BMS,判断故障、执行重置,让你少扔一块还能用的电池。 ## 30秒看懂 OBI OBI 的目标很直接:把一块"罢工"的电池里

gitblog_00729的博客 1121

Java访问修饰符实战:从编译检查到模块化设计契约

Java访问修饰符(private、protected、public、default)是语言级的可见性控制机制,其本质并非语法糖,而是编译期强制执行的封装契约。它通过字节码标志位(如ACC_PRIVATE)在编译阶段拦截非法访问,直接影响模块边界、继承安全与反射行为。在Spring Boot微服务、Java 9+模块化及企业级重构场景中,合理选用修饰符可防范循环依赖、越权调用与架构腐化。尤其default包级私有和protected模板方法,在模块内聚与开闭原则间提供关键平衡。本文结合银行核心系统、电商中台

weixin_33743661的博客 322

Java与Selenium自动化实战:从Web测试到数据采集的完整指南

Web自动化是提升软件质量和开发效率的关键技术,其核心原理是通过程序模拟用户操作,实现对浏览器行为的精准控制。在众多技术方案中,Selenium因其对W3C WebDriver协议的支持和跨浏览器兼容性,成为行业标准。结合Java这一企业级编程语言,能够构建出稳定、可维护的自动化解决方案,其技术价值在于既能执行端到端(E2E)的UI自动化测试,确保应用功能稳定,又能作为强大的动态网页数据采集工具,处理传统HTTP客户端难以应对的JavaScript渲染和复杂交互场景。本文聚焦于Java与Selenium的组

weixin_30873847的博客 697

你不知道的Java反射真相:轻松调用任何类的私有方法(附源码示例)

掌握Java反射获取私有方法并调用的完整方案,突破访问限制实现灵活编程。适用于单元测试、框架开发等场景,通过setAccessible(true)绕过权限检查,动态调用目标方法。源码示例清晰易懂,值得收藏。

InstrGap的博客 940
上一篇: 对Tomcat和Eclipse整合使用的朋友一点建议
下一篇: 超级入门:JAVA从零开始到HelloWorld
老紫竹
博客等级 码龄19年 1万+粉丝 1252原创
评论 3
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值