一、内部类
一个类定义在另一个类内部时称为内部类。
形式:
public class A
{
private class B{}
}
这里,特别的是,每个内部类也对应一个.class文件。形式“外部类$内部类.class”,例如A$B.class。
在定义内部类时,我们会使用private来修饰。
当然也可以定义为public,但是在调用时需要(必须要先创建外部类的引用,再创建外部类的引用):
A a=new A(); A.B b=new A.B();
这样使用起来有点别扭,毕竟定义内部类的目的就是内部使用,外部调用使内部类的定义没有什么意义。
二、内部类的使用
内部类和外部类的关联比较紧密。
public class A
{
private string a;
private void show()
{system.out.println(a);}
private class B
{
public void setB()
{
A.this.a="name";
A.this.show();
}
}
public void test()
{
B b=new B();
b.setB();//测试
}}
在main函数中,调用A a=new A();a.test();//返回“name”
如果想要在外面实现简单的调用的话,只要将内部类定义为静态static。
但是这样的话,跟定义一个普通类没有什么区别,不能使用外部类.this来调用外部类的属性和方法。
三、匿名内部类
在内部类的定义时,我们会使用匿名内部类。
定义一个接口:
public interface radio
{
public void play(string filename);
}
定义内部类时:
public class A
{
private string a;
private void show()
{system.out.println(a);}
public void test()
{
radio a=new radio()//匿名内部类
{
public void play(string filename)
{system.out.println("hahahaha...");}
}
a.play("123");
}
}
这里接口radio直接创建对象,没有名称。生成时对应一个.class文件。文件名:外部类$1.class。
内部类学习难度有点大,下次可以迭代学习。