在前面的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{ }