- 多态参数
在前面的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{
}