多态
1. 多态
package com.qfedu.a;
// 动物类
class Animal {
}
// 狗类,狗是一种动物
class Dog extends Animal {
}
// 单身狗,也是一种动物
class SingleDog extends Animal {
}
// 程序猿,也是一种动物
class CodingMonkey extends Animal {
}
public class Demo1 {
public static void main(String[] args) {
Animal animal = new Animal();
Dog dog = new Dog();
SingleDog singleDog = new SingleDog();
CodingMonkey codingMonkey = new CodingMonkey();
teachAnimal(animal);
// dog类对象是动物类对象
teachAnimal(dog);
// singleDog类对象也是动物对象
teachAnimal(singleDog);
// codingMonkey类对象同样也是动物对象
teachAnimal(codingMonkey);
}
/**
* 该方法需要的类对象是一个Animal类对象
*
* @param animal 这里是一个Animal类对象
*/
public static void teachAnimal(Animal animal) {
System.out.println(animal.getClass() + "来上课了~~~");
}
/**
* 这里是获取一个动物类对象的方法
*
* @return Animal类对象
*/
public static Animal getAnimal() {
// return new Dog(); Dog是动物
// return new SingleDog(); SingleDog也是动物
// return new CodingMonkey(); CodingMonkey还是动物
return new Animal();
}
}
package com.qfedu.a;
interface USB {
/**
* 该方法是要求所有的USB设备必须完成的方法
*/
void connect();
}
/**
* 鼠标类是USB接口的实现类,同时也是USB设备
*/
class Mouse implements USB {
@Override
public void connect() {
System.out.println("鼠标拖来拖去~~~");
}
}
/**
* 这是Logi类,继承Mouse类,同时也是一个USB设备
*/
class Logi extends Mouse {
@Override
public void connect() {
System.out.println("Logi MX Master 2s");
}
}
/**
* 键盘类是USB接口的实现类,同时也是USB设备
*/
class Keyboard implements USB {
@Override
public void connect() {
System.out.println("键盘噼里啪啦~~~");
}
}
/**
* Filco类,继承Keyboard类,同时也是一个USB设备
* HHKB
*/
class Filco extends Keyboard {
@Override
public void connect() {
System.out.println("Filco 87 双模黑色 1099 RMB");
}
}
/**
* 电脑类,需要使用USB接口
*/
class PC {
/**
* 使用USB接口方法
*
* @param usb 这里是一个USB接口,需要连接的是USB设备
*/
public void useUSBInterface(USB usb) {
usb.connect();
}
}
public class Demo2 {
public static void main(String[] args) {
PC pc = new PC();
// USB设备类对象
Mouse mouse = new Mouse();
Keyboard keyboard = new Keyboard();
// 这里需要连接USB设备,传入一个USB设备鼠标类对象
pc.useUSBInterface(mouse);
// 这里需要连接USB设备,传入一个USB设备键盘类对象
pc.useUSBInterface(keyboard);
/*
这里需要一个USB设备,传入的是一个Logi的匿名类对象,同时也是间接实现了USB接口
是一个USB设备
*/
pc.useUSBInterface(new Logi());
/*
这里需要一个USB设备,传入的是一个Filco的匿名类对象,同时也是间接实现了USB接口
是一个USB设备
*/
pc.useUSBInterface(new Filco());
}
}
【总结多态作用】
1. 拓宽方法的参数范围
2. 拓宽方法的返回值范围
父类的引用指向子类的对象,或者接口的引用指向遵从接口的类对象,这就是多态!!!
来源:CSDN
作者:浅汐z
链接:https://blog.csdn.net/qq_45437546/article/details/103596524