我是靠谱客的博主 天真柜子,最近开发中收集的这篇文章主要介绍内部类可以访问外部类的属性和方法吗?,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

注意:

在内部类构造的时候,会将外部类的引用传递进来,并且作为内部类的一个属性,所以内部类会持有一个其外部类的引用。

当内部类调用外部类的私有属性时,其真正的执行是调用了编译器生成的属性的静态方法(即acess$0,access$1等)来获取这些属性值。这一切都是编译器的特殊处理。

外部类可以通过内部类的实例获取私有属性x的操作.

 

如何让内部类私有成员不被外部访问

相信看完上面两部分,你会觉得,内部类的私有成员想不被外部类访问都很困难吧,谁让编译器“爱管闲事”呢,其实也是可以做到的。那就是使用匿名内部类。

由于mRunnable对象的类型为Runnable,而不是匿名内部类的类型(我们无法正常拿到),而Runanble中没有x这个属性,所以mRunnable.x是不被允许的。

 


 

1 内部类对象的创建依赖于外部类对象;

2 内部类对象持有指向外部类对象的引用。

 

关于内部类如何访问外部类的成员, 分析之后其实也很简单, 主要是通过以下几步做到的:
 
1 编译器自动为内部类添加一个成员变量, 这个成员变量的类型和外部类的类型相同, 这个成员变量就是指向外部类对象的引用;
 
2 编译器自动为内部类的构造方法添加一个参数, 参数的类型是外部类的类型, 在构造方法内部使用这个参数为1中添加的成员变量赋值;
 
3 在调用内部类的构造函数初始化内部类对象时, 会默认传入外部类的引用。

 


java中,匿名内部类可以使用外部类的成员变量吗
https://segmentfault.com/q/1010000002796833

细话Java:"失效"的private修饰符 
http://droidyue.com/blog/2014/10/02/the-private-modifier-in-java/

深入理解Java中为什么内部类可以访问外部类的成员 
http://blog.csdn.net/zhangjg_blog/article/details/20000769

 

最后

以上就是天真柜子为你收集整理的内部类可以访问外部类的属性和方法吗?的全部内容,希望文章能够帮你解决内部类可以访问外部类的属性和方法吗?所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(42)

评论列表共有 0 条评论

立即
投稿
返回
顶部