Java-接口-接口的多态特性

  • 多态参数

在前面的Usb接口案例,Usb usb,既可以接收手机对象,又可以接收相机对象,就体现了 接口多态(接口引用可以指向,体现了接口类的对象)

  • 多态数组

演示一个案例:给Usb数组中,存放Phone 和 相机对象,Phone类还有一个特有的方法call(),请遍历Usb数组,如果是Phone对象,除了调用Usb接口定义的方法外,还需要调用Phone 特有方法 call

举例(1)

package com.tao.interface_;

/**
 * Create By 刘鸿涛
 * 2021/12/26 15:23
 */
public class InterfacePolyArr {
    public static void main(String[] args) {
        //多态数组 -> 接口类型数组
        Usb[] usbs = new Usb[2];
        usbs[0] = new Phone_();
        usbs[1] = new Camera_();
        /*
         给Usb数组中,存放 Phone 和 相机对象,Phone类还有一个特有的方法call(),
         请遍历Usb数组,如果是Phone对象,除了调用Usb 接口定义的方法外,还需要调用
         Phone 特有方法 call
         */

        for(int i = 0; i < usbs.length;i++){
            usbs[i].work();     //动态绑定..
            //和前面一样,我们仍然需要进行类型的向下转型
            if(usbs[i] instanceof Phone_){      //判断他的运行类型是 Phone_
                ((Phone_) usbs[i]).call();
            }
        }
    }
}

interface Usb{
    void work();
}
class Phone_ implements Usb{
    public void call(){
        System.out.println("手机可以打电话...");
    }

    @Override
    public void work() {
        System.out.println("手机工作中...");
    }
}
class Camera_ implements Usb{

    @Override
    public void work() {
        System.out.println("相机工作中...");
    }
}



举例(2)

package com.tao.interface_;

/**
 * Create By 刘鸿涛
 * 2021/12/26 12:51
 */
public class InterfacePolyParameter {
    public static void main(String[] args) {

        //接口的多态体现
        //接口类型的变量 if01 可以指向 实现了IF接口的对象实例
        IF if01 = new Monster();    //向上转型
        if01 = new Car();

        //继承体现的多态
        //父类类型的变量 a 可以指向 继承AAA的对象实例
        AAA a = new BBB();          //向上转型
        a = new CCC();
    }
}
interface IF{

}
class Monster implements IF{

}
class Car implements IF{

}

class AAA{

}
class BBB extends AAA{

}
class CCC extends BBB{

}

举例(2)

package com.tao.interface_;

/**
 * Create By 刘鸿涛
 * 2021/12/26 16:41
 */
public class InterfacePolyPass {
    public static void main(String[] args) {
        //接口类型的变量可以指向,实现了该接口的类的对象实例
        IG ig = new Teacher();
        //如果IG 继承了 IH 接口,而Teacher 类实现了 IG接口
        //那么,实际上就相当于 Teacher 类也实现了 IG接口
        //这就是所谓的 接口多态传递现象
        IH ih = new Teacher();
    }
}

interface IH{}
interface IG extends IH{}
class Teacher implements  IG{

}
上一篇:[非专业翻译] Mapster - 映射只读属性


下一篇:SystemVerilog基本语法