Java匿名内部类
什么是匿名内部类?
通俗的可以理解成没有名字的内部类,不知道叫啥的类
匿名内部类像匿名对象一样,只会执行一次
那么,匿名内部类应该怎么用呢?
假如,有一个Animal的抽象类,里面包含了动物的声音。不同的动物,声音不一样,所以又创建了一个type类,如:
abstract class Animal{
public abstract void yell();
}//包含了所有动物叫声的抽象类
class type{
private String name;
type(String name){
this.name=name;
System.out.println("dog="+name);
}
public String getName() {
return name;
}
class dog extends Animal{
public void yell() {
System.out.println("嗷呜~");
}
}//创建了类型为小狗的内部类,并且继承了抽象类
}
然后进行测试:
public class ExceptionDemo3 {
public static void main(String[] args) {
type.dog d1 = new type("狗").new dog();
d1.yell();
}
}
如果用匿名内部类写的话,可以想象成要写一个很胖的匿名对象
class type{
private String name;
type(String name){
this.name=name;
System.out.println("dog="+name);
}
public String getName() {
return name;
}
}
public class ExceptionDemo3 {
public static void main(String[] args) {
new Animal() {
public void yell() {
System.out.println("miaomaio");
}
}.yell();
new type("猫");
}
}
测试结果:
直接在测试类中new一个Animal的对象,但是,这个对象因为是抽象的,所以必须要把里面的yell方法覆写
其实就是一个多态:
Animal 对象名称 = new cat();对象名称.yell();
总结:
1,匿名内部类就是内部类的简化格式
2,定义匿名内部类必须要继承一个类,或实现一个接口(非特殊的类也可以用,但是没必要)
3,匿名内部类的格式:new 父类或者接口(){定义子类的内容}
4,其实匿名内部类就是一个匿名子类对象,而且,这个对象有点胖。可以理解为带内容的对象
5,匿名内部类中定义的方法最好不要超过3个。