内部类和匿名类
来源:互联网 发布:桃源网络硬盘怎么架设 编辑:程序博客网 时间:2024/06/01 14:25
内部类:
编译器生成XXXX$XXXX这样的class文件
使用
1.类名前要加以外部类的名字
2.使用new创建内部类时,也要在new前面冠以对象变量
public class TestInnerClass { public static void main(String[] args) { Parcel p = new Parcel(); p.testShip(); Parcel.Contents contents = p.new Contents(33); /* 在Parcel外部使用Parcel内部类。。*/ Parcel.Destination d = p.new Destination("Hawai"); p.setProperty(contents, d); p.ship(); }}public class Parcel {private Contents c;private Destination d;class Contents{private int i;Contents(int i){this.i = i;}int value(){return i;}}class Destination{private String label;Destination(String whereTo){label = whereTo;}String readLabel(){return label;}}void setProperty(Contents c,Destination d){this.c = c;this.d = d;}void ship(){System.out.println("move "+ c.value() + " to " + d.readLabel());}public void testShip(){c = new Contents(22);d = new Destination("BeiJing");ship();}}
内部类可以直接访问外部类的字段和方法(即时private也可以)
若与外部类有同名的字段或者方法 则可用外部类名.this.字段及方法
内部类也是外部类的成员:
所以访问控制符可以有:public protected默认以及private.
final(不可继承的) abstract(抽象的)
static修饰内部类 则表明该内部类实际上是一种外部类
1.实例化staic类时 不需要在new前面加上对象实例变量
2. static不能访问非static
局部类
在一个方法中也可以定义类,这种类叫做局部类。
1.跟局部变量一样 不能用public,private static等等修饰 可以用 final abstract
2.可以访问外部类的成员
3.不能够访问该方法的局部变量 除非是final局部变量
public class Outer {private int size = 5;public Object makeTheInner(int localVar) {final int finalLocalVar = 99;class Inner {public String toString() {return ("InnerSize " + size + "" + " finalLocalVar:" + finalLocalVar);}}return new Inner();}public static void main(String[] args) {Outer outer = new Outer();System.out.println(outer.makeTheInner(2).toString());/*多态的体现。。 * 输出:InnerSize 5 finalLocalVar:99 * */}}
匿名内部类
顾名思义,是一种特殊的内部类
1.没有类名,定义该对象的同时就生成该对象的一个实例
2.“一次性使用”的类
匿名类的使用
1.不取名字,直接采用父类或接口的名字
2.编译器生成XXXX$1之类的名字
3.类定义的时候就创建实例
即 new 类名或接口名
4.在构造对象时使用父类的构造方法(不能定义构造方法 要带参数的话 只能使用父类构造方法的参数)
匿名类的应用
1.用到界面的时间处理(事件监听处理 )
2.作为方法的参数 (如作为一个比较大小的接口)
import java.util.Arrays;import java.util.Comparator;public class SortTest {public static void main(String[] args) {Integer arrays[] = {5,4,6,1,2}; Arrays.<Integer>sort(arrays,new Comparator<Integer>(){ /*实现Comparator接口的匿名内部类*/@Overridepublic int compare(Integer o1, Integer o2) {// TODO Auto-generated method stubreturn o1-o2;} }); for (Integer integer : arrays) {System.out.println(integer+" ");}}}
0 0
- 内部类和匿名类
- 内部类和匿名类
- 内部类和匿名类
- 内部类和匿名类
- 内部类和匿名类
- 内部类和匿名类
- JAVA 匿名类和内部类 、匿名内部类
- JAVA中的匿名类、内部类和匿名内部类
- 匿名类和匿名内部类
- 匿名类、内部类、匿名内部类
- 匿名类、内部类、匿名内部类
- 匿名类、内部类、匿名内部类
- 匿名类,内部类,匿名内部类
- Java中的内部类和匿名类
- Java中的内部类和匿名类
- Java中的内部类和匿名类
- Java中的内部类和匿名类
- Java中的内部类和匿名类
- Android M版本和非M版本动态权限适配方案
- Java注解是如何工作的
- Operation Queues并发编程
- BZOJ 1192: [HNOI2006]鬼谷子的钱袋
- 【LeetCode】41. First Missing Positive
- 内部类和匿名类
- Ubuntu 中配置 yum
- 关于取消的默认的Enter的keydown事件的疑问与解决
- Crontab的格式
- 对Java BIO、NIO、AIO 学习
- Android Studio Debug按钮简介
- NativeScript简介
- 关于进程间通讯的一些知识
- SQL语法分类