内部类和匿名内部类

来源:互联网 发布:淘宝宝贝命名规则 编辑:程序博客网 时间:2024/05/18 19:22

内部类和匿名内部类

监听器类、线程,经常使用(也许你经常用,但是你不知道他们是什么)

内部类

什么是内部类?

(定义在类里面的类)

内部类使用方法?

一个最简单的内部类

class A{class B{}}


内部类编译后,多出的文件


比别人多了一个A$B.class

生成内部类对象的方法?

class A{int i;class B{int j;int funB(){int result = i + j;//完整写法 int result = A.this.i = this.j;(这两个this也是不一样的,一个是A的,一个是B的)//总之记住:内部类可以随意使用外部类的变量return result;}}}

内部类和继承是没有任何关系的,B是A的内部类,B可以使用A中的成员变量,但是B并不是继承了A

class Test{public static void main(String args []){A a = new A();A.B b = a.new B();a.i = 3;b.j = 1;int result = b.funB();System.out.println(result);A.B b2 = new A().new B();}}

匿名内部类

interface A{public void doSomething();}

class B{public void fun(A a){System.out.println("B类的fun函数");a.doSomething();//A类型的参数,当然可以用a的方法}}

class AImpl implements A{public void doSomething(){System.out.println("AImpl doSomething");}}

class Test{public static void main(String args []){AImpl ai = new AImpl();A a = ai;//向上转型B b = new B();b.fun(a);}}

运行结果



匿名内部类写法

A接口是不能够new的。但是后面有了{}之后。神奇的事情发生了,请看下面写法。

new A(){......}  

名字解释:显示没有名字,然后在Test里面,又是内部类,然后就叫做:匿名内部类

这种写法意义:就是实现(implements)接口A,并重写方法;

new A(){......}就是实现了接口A并向上转型的参数;【如果不懂,请参看对比:上面Test.java+AImpl.java<----------> 下面Test.java写法】

class Test{public static void main(String args []){// AImpl ai = new AImpl();// A a = ai;//向上转型B b = new B();// b.fun(a);//匿名内部类写法:有点像写button监听方法的样子b.fun(new A(){public void doSomething(){System.out.println("匿名内部类");}});}}



如果看了上面,你还不懂啊?看视屏。讲师说得真心不错诶。



0 0