关于在外部对内部类进行实例化和引用
来源:互联网 发布:大帝和雪兔分手知乎 编辑:程序博客网 时间:2024/06/05 13:23
有些时候在写一些小的项目或者demo时,为了方便或者逻辑上归类往往定义一些内部类,比如一些小型的model,各种Adapter、BroadcastReceiver等等。
类似结构:
class A{ static class B{ public void put(){ System.out.println("abc); } }}
此时,对B进行实例化这样:
A.B b1 = new A.B();b1.put();
此时类B作为类A中的静态成员,可以以A.B的形式对B进行访问而不必实例化A。 这种形式的优点是访问方便,清晰明了,不必持有A的引用;缺点是不利于在A与B之间进行数据传递。
例如:
class A{ String str = "abc"; static class B{ public void put(){ System.out.println(str); } }}
此时将报错Cannot make a static reference to the non-static field str,即静态的成员不能持有非静态的成员的引用。 可以将str改为static,将B要访问的成员都改为static,但这会导致static的滥用违背面向对象的思想,还可能会造成内存泄漏。另一种用法是将class B的static 修饰去掉
class A{ class B{public void put(){ System.out.println("abc"); } }}
这样实例化
A a1 = new A();A.B b1 = a1.new B();b1.put();
先取得A的引用,在借由A的实例对B进行实例化,由于此时B作为A的成员,因此B中可自由访问A类的其他成员。这种情况下A与B之间联系密切,实例化B必须取得A的引用。
当然,在项目规模较大而且考虑到后续的拓展,还是尽量采用合适的架构和写成独立的类。
0 0
- 关于在外部对内部类进行实例化和引用
- Gson关于对内部类的序列化
- 对内部类引用外部方法变量需用final修饰的理解
- java关于外部类和内部类
- 关于java 中 classname.new classname2();的写法 其实是外部类静态成员对内部类的访问
- 对内部类及外部类的一些测试体会
- 匿名内部类的demo演示(匿名内部类持有外部类的实例引用)
- 关于内部类实例化
- 关于引用外部 video在手机上的应用
- 为什么在匿名内部类中引用外部对象要加final修饰符
- 内部类引用外部类局部变量
- 内部类引用外部类对象
- 对内部类的理解
- 对内部类的应用
- java静态内部类和非静态内部类,及他们在外部的定义
- 关于“无法解析的外部符号”和“该符号在函数_wmain 中被引用”的问题
- 内部类和外部类
- 内部类和外部类
- Xcode中的Info.plist字段列表详解
- LLL算法JAVA实现
- 剑指Offer面试题17(Java版):合并两个排序的链表
- 设计模式之 工厂模式(demo)
- Angularjs ng-form
- 关于在外部对内部类进行实例化和引用
- C++(构造函数&&析构函数)
- Comparable 和 Comparator 的区别
- Struts 2 配置文件概述
- Li Fei-fei写给她学生的一封信,如何做好研究以及写好PAPER
- 操作GitHub实现代码托管
- PSVR设计不让玩家来回走动的原因
- 第六周--队列数组
- String类的实现