【你问我答】内部类private变量可被外部类直接访问吗?

问题描述:

Java内部类的private变量可被外部类直接访问吗?为什么?

回答有奖:

选取一位认真回答问题的牛友,赠送200牛币!
▶回答尽量有自己的思考,不要单纯的只是复制粘贴定理定义,或者他人blog哦~

你问我答问题汇总:点击进入
关注你问我答栏目:点击关注

你问我答 - 答问题,成大佬,拿牛币!
你问我答是牛客新栏目,每周1期几个问题,
牛友在问题贴下留下自己的知识,经验与见解,
帮助更多牛友了解更多技术相关知识!
#悬赏##Java#
全部评论
可以。
1
送花
回复
分享
发布于 2020-02-04 13:44
可以。 Java语言规范里只说了外部类可以访问内部类的private/protected成员,内部类也可以访问外部类的private/protected成员,但是没有规定死要如何实现这种访问。 JVM规范则在大多数时候把每个类都看作等价于top-level的,也就是说JVM不关心外部类和内部类之间的嵌套关系。**对JVM来说,enclosing class和inner class在大部分情况下都是“不相关的两个类”,视为一个包中的两个类,所以它们之间相互是不能访问对方的private/protected成员的。** 但是在实现中,衔接Java语言规范与JVM规范的就是Java源码级编译器(例如javac、ECJ等)。简单来说就是在外部类/内部类之间要访问对方的private/protected成员时,Java源码级编译器**会生成合适的“access method”**来提供合适的可访问性,这样就绕开了原本的成员的可访问性不足的问题。 综上,内部类private变量可被外部类直接访问,这由Java源码级编译器在编译过程中实现。
1
送花
回复
分享
发布于 2020-02-05 11:17
滴滴
校招火热招聘中
官网直投
C++和Java应该不一样吧
点赞
送花
回复
分享
发布于 2020-02-04 10:49
显然是不可以的,因为private只能被该类的方法所访问,不管这个类是内部类还是什么类
点赞
送花
回复
分享
发布于 2020-02-04 17:55
在讲Singleton时我举例时用过这样一段代码:   public class SingletonDemo { private static class SingletonHolder{ private static SingletonDemo instance=new SingletonDemo(); } private SingletonDemo(){ System.out.println("Singleton has loaded"); } public static SingletonDemo getInstance(){ return SingletonHolder.instance; } } 相信你一定发现了一个问题:外部类中的getInstance()方法调用了内部类SingletonHolder中的private变量instance。
点赞
送花
回复
分享
发布于 2020-02-09 17:14

相关推荐

点赞 评论 收藏
转发
点赞 1 评论
分享
牛客网
牛客企业服务