内部类,就是将一个类定义在另一个类的内部,内部的类称为内部类
public class Outer{
class Inner{
//...
}
}
创建内部类:
外部类名.内部类名 实例 = 外部类名.new 内部类构造方法(参数)
class Outer
{
int data;
void printData(){
System.out.println("外部类打印");
}
void visitInner(){
Inner i = new Inner();
i.data = 90;
System.out.println("Inner data = "+i.data);
}
class Inner{
int data;
void innerPrint(){
System.out.println("内部类打印");
Outer.this.printData();
}
}
}
public class Test {
public static void main(String[] args) {
Outer o = new Outer();
Outer.Inner test = o.new Inner();
test.innerPrint();
o.visitInner();
}
}
匿名内部类
是没有名称的内部类,无法引用。需要在创建时,作为new语句的一部分来声明并创建实例
匿名内部类必须继承一个类或者实现一个接口,所有父类是抽象类,则匿名内部类必须实现其所有抽象方法
语法:
new interface/superclass(){类体}
abstract class Demo1
{
abstract void printInfo();
}
interface Demo2
{
abstract void interprint();
}
public class Test {
public static void main(String[] args) {
Demo1 d = new Demo1(){
void printInfo(){
System.out.println("这不是Demo1,这是匿名内部类的方法");
}
};
d.printInfo();
new Demo2(){
public void interprint(){
System.out.println("这不是接口的实例,而是匿名内部类的方法");
}
}.interprint();
}
}