匿名内部类可以说是局部内部类的特殊形式,也须放在方法内,其前提是存在一个类或者接口,这里的类可以是抽象类,也可以是具体类
匿名内部类的好处是不用再多写一个类出来,相当于实现类或是子类的简写
如果只使用一次就使用匿名内部类
package 内部类;
//匿名内部类
public class ooouter {
private int s=1;
public int getS() {
return s;
}
public void work() {
new inner()/*{重写方法;}*/.eat();//直接调用方法
//间接调用方法 inner i=new inner(){重写方法(匿名内部类为接口或抽象类时);} i.eat;
//本质是一个继承了该类或实现了该接口的子类匿名对象
//如果这里是接口,那么问题来了,接口不是不能创建对象吗?
//接口的确不能创建对象,但是这里是根据匿名对象创建对象,匿名对象已经将方法重写了,相当于是接口的实现类,用接口的实现类创建对象就没问题了
}
}
public class inner {//可以是具体类或抽象类,也可以是接口
public void eat(){
System.out.println("匿名内部类");
}
}
//测试类
public class tttest {
public static void main(String[] args) {
ooouter o=new ooouter();
System.out.println(o.getS());//调用外部类的私有方法
o.work();//调用含匿名内部类的方法
}
}