内部类和匿名内部类
监听器类、线程,经常使用(也许你经常用,但是你不知道他们是什么)
内部类
什么是内部类?
(定义在类里面的类)
内部类使用方法?
一个最简单的内部类
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("匿名内部类");
}
});
}
}
如果看了上面,你还不懂啊?看视屏。讲师说得真心不错诶。

被折叠的 条评论
为什么被折叠?



