子类为什么可以访问父类的私有方法
<code>class PrivateOverride { private void f() { System.out.println("private f()"); } public void hello(){ this.f(); this.bar(); } protected void bar(){ System.out.print("pri bar"); } } class Derived extends PrivateOverride { public void f() { System.out.println("public f()"); } public void bar(){ System.out.print("deri bar"); } } class Test4{ public static void main(String[] args) { Derived po = new Derived(); po.hello(); } }</code>
输出:
private f()
deri bar
为什么呢
回复内容:
<code>class PrivateOverride { private void f() { System.out.println("private f()"); } public void hello(){ this.f(); this.bar(); } protected void bar(){ System.out.print("pri bar"); } } class Derived extends PrivateOverride { public void f() { System.out.println("public f()"); } public void bar(){ System.out.print("deri bar"); } } class Test4{ public static void main(String[] args) { Derived po = new Derived(); po.hello(); } }</code>
输出:
private f()
deri bar
为什么呢
首先这里并非直接调用
private
的f()
方法,就像getter
方法能拿到private
实例变量一样,这个无需解释。这里有个继承的问题:
Derived
类里的f方法
并非是其父类PrivateOverride f方法
的重写, 因为重写方法要求重写后方法的访问权限修饰符不能比父类更严格,在hello
方法里执行this.f()
,编译器优先找最近的f
(即父类的f
),所以打出了private f()
。
当然,在实际开发中,要尽量避免这种混淆,做做基础面试题还可以。
你是通过公有的方法去访问私有的方法,这是可以的
public void hello() 是公有方法
它是允许调用本类的私有方法
依照你上述的例子并不能说子类能访问父类的私有方法。因为hello
本身就是父类的方法。
如果子类是这样:
<code>class Derived extends PrivateOverride { public void hello() { System.out.println("public f()"); } public void bar(){ this.f(); //... } }</code>
如果能正常运行才能说明子类能够访问父类的私有方法。

热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

Video Face Swap
使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热门文章

热工具

记事本++7.3.1
好用且免费的代码编辑器

SublimeText3汉化版
中文版,非常好用

禅工作室 13.0.1
功能强大的PHP集成开发环境

Dreamweaver CS6
视觉化网页开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

PHP仍然流行的原因是其易用性、灵活性和强大的生态系统。1)易用性和简单语法使其成为初学者的首选。2)与web开发紧密结合,处理HTTP请求和数据库交互出色。3)庞大的生态系统提供了丰富的工具和库。4)活跃的社区和开源性质使其适应新需求和技术趋势。

IIS和PHP可以兼容,通过FastCGI实现。1.IIS通过配置文件将.php文件请求转发给FastCGI模块。2.FastCGI模块启动PHP进程处理请求,提高性能和稳定性。3.实际应用中需注意配置细节、错误调试和性能优化。

多次调用session_start()会导致警告信息和可能的数据覆盖。1)PHP会发出警告,提示session已启动。2)可能导致session数据意外覆盖。3)使用session_status()检查session状态,避免重复调用。

AI可以帮助优化Composer的使用,具体方法包括:1.依赖管理优化:AI分析依赖关系,建议最佳版本组合,减少冲突。2.自动化代码生成:AI生成符合最佳实践的composer.json文件。3.代码质量提升:AI检测潜在问题,提供优化建议,提高代码质量。这些方法通过机器学习和自然语言处理技术实现,帮助开发者提高效率和代码质量。

Java的平台独立性是指编写的代码可以在任何安装了JVM的平台上运行,无需修改。1)Java源代码编译成字节码,2)字节码由JVM解释执行,3)JVM提供内存管理和垃圾回收功能,确保程序在不同操作系统上运行。

session_start()iscucialinphpformanagingusersessions.1)ItInitiateSanewsessionifnoneexists,2)resumesanexistingsessions,and3)setsasesessionCookieforContinuityActinuityAccontinuityAcconActInityAcconActInityAcconAccRequests,EnablingApplicationsApplicationsLikeUseAppericationLikeUseAthenticationalticationaltication and PersersonalizedContentent。

HTML5带来了五个关键改进:1.语义化标签提升了代码清晰度和SEO效果;2.多媒体支持简化了视频和音频嵌入;3.表单增强简化了验证;4.离线与本地存储提高了用户体验;5.画布与图形功能增强了网页的可视化效果。

MySQL函数可用于数据处理和计算。1.基本用法包括字符串处理、日期计算和数学运算。2.高级用法涉及结合多个函数实现复杂操作。3.性能优化需避免在WHERE子句中使用函数,并使用GROUPBY和临时表。
