匿名内部类是一个没有类名的特殊内部类,适合创建只需要使用一次的类,创建匿名内部类需要继承一个已有的父类或实现一个接口。因为匿名内部类无名,所以不存在构造方法,且不能重复使用
格式:
new 父类/接口名(){
类体
};
匿名内部类没构造方法,不包含静态成员。
public class Test {
public static void main(String[] args){
Animal a=new Animal(){
@Override
public void move() {
System.out.println("乱跑");
}
};
a.move();
}
}
public interface Animal {
void move();
}
上面是接口里只有一个方法,多个方法同理
public class Test {
public static void main(String[] args){
Animal a=new Animal(){
@Override
public void move() {
System.out.println("乱跑");
}
@Override
public void eat() {
System.out.println("贼能吃");
}
};
a.move();
//a.eat();
}
}
public interface Animal {
void move();
void eat();
}
使用匿名内部类时,我们必须是继承一个类或者实现一个接口,但是两者不可兼得,同时也只能继承一个类或者实现一个接口。
匿名内部类中是不能定义构造函数的。
匿名内部类中不能存在任何的静态成员变量和静态方法。
匿名内部类为局部内部类,所以局部内部类的所有限制同样对匿名内部类生效。
匿名内部类不能是抽象的,它必须要实现继承的类或者实现的接口的所有抽象方法。