Java——多态——匿名内部类

Java——多态——匿名内部类

案例1:

//匿名内部类
interface Animal15 {
    void shout();
}
//定义测试类
class ExampleA15{
    public static void main(String[] args) {
        //定义一个内部类 Cat实现 Animal接口
        class Cat implements Animal15 {
            public void shout(){
                System.out.println("喵喵……");
            }
        }
        animalShout(new Cat());//调用 animalShout()方法并且传入 Cat对象
    }
    //定义静态方法 animalShout()
    public static void animalShout(Animal15 an){
        an.shout();//调用传入对象 an的 shout()方法
    }
}

格式:

new 父类(参数列表)或 父类接口(){
	//匿名内部类实现部分
}

案例2:

//匿名内部类
interface Animal16 {
    void shout();
}
//定义测试类
class ExampleA16{
    public static void main(String[] args) {
        //定义匿名内部类作为参数传递给 animalShout()方法
        animalShout(new Animal16(){
            public void shout(){
                System.out.println("喵喵……");
            }
        });
    }
    //定义静态方法 animalShout()
    public static void animalShout(Animal16 an){
        an.shout();//调用传入对象 an的 shout()方法
    }
}

分步骤编写匿名内部类

①在调用 animalShout()方法时,在方法参数位置上写上 new Animal(){},这相当于创建了一个实例对象,并将对象作为参数传给 animalShout()方法。在 new Animal()后面有一对大括号,表示创建的对象为Animal的子类实例,该子类是匿名的。

animalShout(new Animal(){});

②在大括号中编写匿名子类的实现代码

animalShout(new Animal(){
    public void shout(){
        System.out.println("喵喵……");
    }
});

加深对接口类的认识

案例3:

//定义 PCI接口
interface PCI {
    void start();
    void stop();
}
//定义 NetWorkCard类实现 PCI接口
class NetWorkCard implements PCI {

    @Override
    public void start() {
        System.out.println("Send...");
    }

    @Override
    public void stop() {
        System.out.println("NetWork Stop");
    }
}
//定义 SoundCard类实现 PCI接口
class SoundCard implements PCI {

    @Override
    public void start() {
        System.out.println("Du do...");
    }

    @Override
    public void stop() {
        System.out.println("Sound Stop");
    }
}
//定义 MainBoard(主板)类
class MainBoard {
    //定义一个 userPCICard方法,接收 PCI类型的参数
    public void userPCICard(PCI pci) {
        pci.start();    //调用传入对象的方法
        pci.stop();
    }
}
//定义 Assembler(汇编程序)类
class Assembler {
    public static void main(String[] args) {
        MainBoard mb = new MainBoard(); //创建实例对象
        NetWorkCard nc = new NetWorkCard();
        mb.userPCICard(nc);
        //调用 MainBoard对象的 userPCICard()方法,将nc作为参数传入
        SoundCard sc = new SoundCard();
        mb.userPCICard(sc);
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值