匿名内部类:
本质:匿名内部类本质就是一个继承父类的匿名子类的对象(一个类的子类对象)
作用:简化代码
格式:
new 类名/接口名(){
重写抽象方法
}
现在我们有一个Person类。
class abstract Person {
public abstract void eat();
}
需求:执行Person类的eat方法
操作步骤:
1.创建一个子类继承Person类
2.在子类中重写eat方法
3.创建子类对象
4.使用子类对象调用eat方法
//创建一个子类继承Person类
class Student extends Person {
//重写方法
@Override
public void eat() {
System.out.println("学生吃学生餐");
}
}
//创建一个测试类
public class Test {
public static void main(String[] args) {
//创建子类对象
Person student = new Student;
//调用eat方法
student.eat();
}
}
我这么懒的人,这样写的代码太多了,已经没有元气继续敲代码了。
有没有更简单的办法呢?
现在再来看操作的前三步,我们的目的是为了创建一个子类对象。
匿名内部类的本质是一个类的子类对象。
前三步是不是可以浓缩成一步,直接用匿名内部类就行呀!
我可真是个小天才呢~
//创建一个测试类
public class Test {
public static void main(String[] args) {
//创建Person的匿名内部类对象
Person student = new Person{
@Override
public void eat() {
System.out.println("学生吃学生餐");
}
};//这里的分号不要忘记咯。
//调用eat方法
student.eat();
}
}
总结一下:
匿名只是把名字隐藏,在案例中,就是将Student类的名字被隐藏了。
Student做的事情,重写eat方法,在匿名内部类也做了。
所以,当我们想得到一个类的子类对象时,直接创建这个对象的匿名内部类就可以啦。
同理,接口也是一样的方法。