一、概念
匿名内部类,就是没有名字的内部类结构,因为其没有类名,所以也没有构造函数,初始化的时候使用的是构造块
它的具体实现过程如下
new 父类构造器(参数列表)| 实现接口()
{
//匿名内部类的类体部分
}
二、程序解析
(1)继承抽象类的的实现方式
abstract class Person {
public abstract void eat();
}
public class Demo {
public static void main(String[] args) {
Person p = new Person() {
public void eat() {
System.out.println("eat something");
}
};
p.eat();
}
}
运行结果:eat something
(2)继承接口的实现方式
水电费
interface Person {
public void eat();
}
public class Demo {
public static void main(String[] args) {
Person p = new Person() {
public void eat() {
System.out.println("eat something");
}
};
p.eat();
}
}
运行结果:eat something
(3)在线程上的应用
public class Demo {
public static void main(String[] args) {
Thread t = new Thread() {
public void run() {
for (int i = 1; i <= 5; i++) {
System.out.print(i + " ");
}
}
};
t.start();
}
}
运行结果:1 2 3 4 5
三、注意事项
(1)使用时必须继承一个类或者实现一个接口,只能是一个。
(2)没有类名,不能够定义构造函数
(3)不能存在任何的静态成员变量和静态方法
(4)为局部内部类,局部内部类的限制对匿名同样有效
(5)当方法的形参要在匿名内部类中使用时,该形参必须为final
为什么要用final:因为虽然外部的参数看似传进来了,但是实际上内部类中调用的是自己的属性,而不是外部方法传递的参数
我们使用final来使这个应用不可改变。