匿名内部类:就是没有名字的内部类。
特点:只能使用一次,因为匿名内部类是定义在方法体中。
本质:是一个 带具体实现的 父类或者父接口的 匿名的 子类对象。
代码格式:父类名称|接口名称 对象名 = new 父类构造()|接口名称() {
// 覆盖重写所有抽象方法
};
1.不使用匿名内部类来实现抽象类:
package Javal练习;
public class InnerTest {
public static void main(String[] args) {
Person1 c1 = new china();
c1.say();
}
}
abstract class Person1{
public abstract void say();
}
class china extends Person1{
@Override
public void say() {
System.out.println("我说中国话");
}
}
可以看到我们专门创建了一个类来实现Person1,若该china只用一次是不是有一点浪费呢?
所以下面我用了匿名内部类。
2.使用匿名内部类实现抽象类:
package Javal练习;
public class InnerTest {
public static void main(String[] args) {
Person1 p1 = new Person1() {
@Override
public void say() {
System.out.println("我说中国话");
}
};
p1.say();
}
}
abstract class Person1{
public abstract void say();
}
3.使用匿名内部类实现接口:
package Javal练习;
public class Test {
public static void main(String[] args) {
Person2 p1 = new Person2() {
@Override
public void say() {
System.out.println("我说中国话");
}
};
p1.say();
}
}
interface Person2{
void say();
}