匿名内部类*
如果有一个接口或者抽象类,必须要用class定义一个实现类写重写抽象方法,才能创建对象并使用。
匿名内部类就是省略了用class定义子类的过程,直接使用父类或者接口创建子类对象
匿名内部类
案例1:饲养员饲养动物
abstract class Animal{//动物类
public void eat() {
}
}
class Fedder{//饲养员类
public void feed(Animal a) {
a.eat();
}
}
//测试类
public class Test6 {
public static void main(String[] args) {
//创建饲养员对象
Fedder fedder=new Fedder();
//饲养员再养一只动物
fedder.feed(new Animal() {
public void eat() {
System.out.println("牛在吃草");
}
});
//饲养员养另一只动物
fedder.feed(new Animal() {
public void eat() {
System.out.println("鸡在啄米");
}
});
}
}
接口回调
案列2:给机器人赋予技能
import java.util.jar.Attributes.Name;
//=====================接口回调===========================
//定义技能接口
interface Skill{
public void useSkill();//释放技能
}
//机器人类
class Robot{
private Name name;//名字
private Skill skill;//技能
//设置技能
public void setSkill(Skill skill) {
this.skill=skill;
}
//开始
public void paly() {
skill.useSkill();//这里执行的是具有技能的复写
}
}
//测试类
public class Test7 {
public static void main(String[] args) {
//创建机器人对象
Robot hero=new Robot();
//给机器人设置技能
hero.setSkill(new Skill(){//回调:public void setSkill(Skill skill)
@Override
public void useSkill() {
System.out.println("跑");
}
});
hero.paly();
}
}