多态参数
接口引用可以指向实现接口类的对象
package test;
public class Main {
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 AAA {
}
多态数组
案例
给Usb数组中,存放Phone和相机对象,Phone类还有一个特别的方法call(),请遍历Usb数组,如果是Phone对象,除了调用Usb接口定义的方法外,还需要调用Phone的特有方法call
package test;
public class Main {
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 phone = (Phone)usbs[i];
// phone.call();
((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("相机工作中...");
}
}
接口存在多态传递现象
package test;
/**
* 演示多态传递现象
*/
public class Main {
public static void main(String[] args) {
//接口类型的变量可以指向,实现了该接口的类的对象实例
IG ig = new Teacher();
//如果IG 继承了 IH 接口,而Teacher 类实现了 IG接口
//那么,实际上就相当于 Teacher 类也实现了 IH接口.
//这就是所谓的 接口多态传递现象.
IH ih = new Teacher();
ih.hi();
ig.hi();
}
}
interface IH {
void hi();
}
interface IG extends IH{}
class Teacher implements IG {
@Override
public void hi() {
System.out.println("hi~~");
}
}