=
碰到类似问题,多读《thinking in java》。
=
多从更高的视角看问题。
设计者在设计的时候,为什么让内部类访问外部类的各种私有内容(变量和函数)?
进一步推论:因为外部成员变量是new出来的,等价于内部类(实例)持有外部类(实例)的引用。为什么?
再进一步推论:内部类不能单独new,只要单独new,就不能持有外部实例的引用了,因为外部实例很可能还没有创建。
再进一步推论:内部类只能被外部类来创建。
等价于:内部类是外部类的私有物品,只不过外部类可以暴露出来给外部使用,但外部不能随便创建。
有了上面的推理和设计视角,可以更容易理解下面的文章:
https://blog.csdn.net/wint_ing/article/details/81360278
publicclass A {
publicclass B {
}
};
需要实例B类时,按照正逻辑是,A.B ab = new A.B();
那么编译器就会出现一个错误–“is not an enclosing class”
再翻看相关的Java代码,发现原来写法出错了!正确的做法是
Aa = new A();
A.B ab = a.new B();
没有静态(static)的类中类(内部类)不能使用外部类进行.操作,必须用实例来进行实例化类中类.
内部类如何获得外部实例?
public Table getTable() { return Table.this; }
这种语法是特殊规定的。
内部类的使用场景?
母子关系。
先有母,再有子。子持有母的引用。
最近在设计内存表的结构时,发现很符合内部类的设计初中。
Table
Row
先有table,再有row。row持有table的引用。
====分隔符====
参考《三种内部类的一些小总结》:
https://blog.csdn.net/m0_67713132/article/details/124829831
这篇文写的比较简单,没什么原理性内容。
参考:《深入理解Java中为什么内部类可以访问外部类的成员》
https://blog.csdn.net/fengyuyeguirenenen/article/details/123070246
这篇文章比较搞笑,题目的问题如果需要去看字节码来找原因,类似于研究治水需要去研究水分子一样。
-
-
-
相关推荐
名著导读《朝花夕拾》ppt课件PPT课件.pptx
朝花夕拾练习题100.pdf
朝花夕拾阅读汇报课.ppt
朝花夕拾考题全部答案.doc
朝花夕拾练习题答案.doc
朝花夕拾考题+全部答案.docx
朝花夕拾鲁迅作品读书感受.pdf
《朝花夕拾》名著试题答案.pdf
Groovy-朝花夕拾-mht.rar。Groovy学习资料。Grails学习资料。mht网页格式。
名著导读《朝花夕拾》ppt课件_1PPT课件.pptx
《朝花夕拾》读书汇报会主持稿.doc
2021年朝花夕拾读后感1500优秀.pdf
鲁迅《朝花夕拾》中考名著习题及答案.doc
《朝花夕拾》知识点测试题及答案精练.doc
鲁迅朝花夕拾名著读后感中学生作文5篇.docx
朝花夕拾读后感作文1000 [朝花夕拾读后感范文]
朝花夕拾读后感500字作文鲁迅朝花夕拾读书笔记5篇.doc
中同学名著朝花夕拾读书心得5篇_朝花夕拾读后感.docx
(新人教版)2019年秋七年级语文上册名著导读朝花夕拾习题课件.ppt
【人教版八班级上册名著导读《朝花夕拾》《骆】朝花夕拾名著导读.docx