package com.zjl.controller;
/**
* 多态和接口案例
* <p>
* 要求: (1)定义一个充电器的接口(充电器必须满足插入、拔出两个功能)
* (2)定义两个充电器的实现类,一个是汽车充电器,除了具有插入、拔出功能,独有的功能是给汽车充电;
* 另一个是手机充电器,除了具有插入、拔出功能,独有的功能是给手机充电。
* (3)定义一个插座类,具有的功能是充电。
* (4)实现功能:插座分别给汽车和手机充电。
*
* Created by zhangjianlong 2022/3/30
**/
public class Demo {
public static void main(String[] args) {
// 购买一个插座
Socket socket = new Socket();
// 购买一个手机充电器,并且给手机充电
PhoneCharger phoneCharger = new PhoneCharger("手机充电器");
socket.charge(phoneCharger);
System.out.println("------------------------");
// 购买一个汽车充电器,并且给车充电
CarCharger carCharger = new CarCharger("汽车充电器");
socket.charge(carCharger);
}
}
/**
* 定义插座类,具有的功能是充电
*/
class Socket {
// 注意:我们这里的入参一定是Charger类型,这样才既能传入CarCharger,也能传入PhoneCharger,这里体现了多态的用法
public void charge(Charger charger) {
// 因为insert方法是所有Charger接口实现类具有的方法,所以可以直接调用
charger.insert();
// 因为chargeCar、phoneCharger是实现类独有的方法,所以需要强转成对应的实现类才能调用独有方法
if (charger instanceof CarCharger) {
CarCharger carCharger = (CarCharger) charger;
carCharger.chargeCar();
} else if (charger instanceof PhoneCharger) {
PhoneCharger phoneCharger = (PhoneCharger) charger;
phoneCharger.chargePhone();
}
// 因为pullOut方法是所有Charger接口实现类具有的方法,所以可以直接调用
charger.pullOut();
}
}
/**
* 定义2个充电器,汽车充电器和手机充电器
*/
class CarCharger implements Charger {
private String name;
public CarCharger(String name) {
this.name = name;
}
// 汽车充电器的独有功能
public void chargeCar() {
System.out.println(name + "开始给汽车充电!!!!");
}
@Override
public void insert() {
System.out.println(name + "插入插座~~~");
}
@Override
public void pullOut() {
System.out.println(name + "拔出插座~~~");
}
}
class PhoneCharger implements Charger {
private String name;
public PhoneCharger(String name) {
this.name = name;
}
// 手机充电器的独有功能
public void chargePhone() {
System.out.println(name + "开始给手机充电!!!!");
}
@Override
public void insert() {
System.out.println(name + "插入插座~~~");
}
@Override
public void pullOut() {
System.out.println(name + "拔出插座~~~");
}
}
/**
* 定义充电器接口类,必须实现接入和拔出功能
*/
interface Charger {
// 插入
void insert();
// 拔出
void pullOut();
}
关于多态和接口的小案例
于 2022-03-30 22:02:26 首次发布