内部类
:通俗说就是一个类定义在另一个类的里面
class A{
class b{
}
}
同时我们在编译之后可以看到产生了一个特殊的A$B.class文件
声明内部类的对象应如下:
class Test{
public static void main(String args[]){
A a = new A;
A.B b = new A().new B();
}
}
值得注意的是,内部类可以随意使用外部类的成员变量,但这并不意味着内部类继承外部类
匿名内部类
先看下面的例子 例子中funB()函数需要A类型对象作为参数,如何实现将参数传入funB()
先定义一个接口
interface A{
public void doSomething();
}
A的接口实现类 implements:
class AImpl implements A{
public void doSomething(){
System.out.println("doSomething");
}
}
class B{
public void fun(A a ){
System.out.println("B类的fun函数");
a.doSomething();
}
}
//普通的实现方法
class Test{
public static void main(String args[]){
AImpl al = new AImpl();
A a = al;
B b = new B();
b.fun(a);
}
}
匿名内部类的实现方法
class Test{
public static void main(String args[]){
AImpl al = new AImpl();
A a = al;
B b = new B();
b.fun(new A(){
public void doSomething(){
System.out.println("匿名内部类");
}
});
}
}
new A()后的代码,与A的接口实现类代码一致,只是没有名字,而且这个类在Test类里面,所以我们叫他匿名内部类