内部类和匿名内部类小结
1.什么是内部类
class A{
class B{
}
}
class B就是A的内部类,
内部类编译出来就是内部类&外部类 比如B&AWorker
2.如何生存内部类的对象
class Test{
public static void main(String args[]){
A a = new A();
//生存一个内部类对象
A.B b = new A().new B();
}
}
3.内部类B可以使用外部类A的成员变量和成员函数,但是不拥有外部类的成员变量。
class A{
int i;
class B{
int j;
int addFun(){
int result = 0;
return result = i + j;
}
}
}
class Test{
public static void main(String args[]){
A a = new A();
//生存一个内部类对象 b
// A.B b = new A().new B();
A.B b = a.new B();
a.i = 4;
b.j = 10;
int result = b.addFun();
//System.out.println("i+j:=",result);
System.out.println(result);
}
}
4.匿名内部类
interface A{
public void doSomething():
}
class B {
public void fun(A a){
System.out.println("B类的fun 函数");
a.doSomething();
}
}
class AImpl implements A{
public void doSomething(){
System.out.print("AImpl doSomething");
}
}
class Test{
public Static void Main(String args[]){
// inneerComment();
noNameInner();
}
/**
*正常的写法,使用内部类
*/
public static void inneerComment(){
AImpl al = new AImpl();
A a = al;
B b = new B();
b = new B();
b.fun(a);
}
/*
* 匿名内部类
*/
public static void noNameInner(){
B b = new B();
b = new B();
/*
*
*/
b.fun(new A(){
public void doSomething(){
System.out.println("匿名内部类");
}
});
}
}
1)注意 b.fun(new A(){
public void doSomething(){
System.out.println("匿名内部类");
}
});中
{
public void doSomething(){
System.out.println("匿名内部类");
}
}
与 AImpl 实现是相同的,可以把{ ... fun() ...}当成一个类,所以被称为匿名内部类。
2)new A(){
public void doSomething(){
System.out.println("匿名内部类");
}
}
生成的是一个对象。