定义两个基础接口 IVehicle 和IWeapon
package InterFace1;
public interface IVehicle {
void Run();
}
package InterFace1;
public interface IWeapon {
void Fire();
}
使用ITank, 继承 上面2个接口IVehicle 和IWeapon
package InterFace1;
public interface ITank extends IVehicle,IWeapon {
@Override
void Run() ;
@Override
void Fire();
}
建立2个类, 轻型坦克和中型坦克, 他们都继承于 ITANK
package InterFace1;
public class HeavyTank implements ITank {
@Override
public void Run() {
System.out.println("HeavyTank is running!");
}
@Override
public void Fire() {
System.out.println("Boom!!!!!!!");
}
}
package InterFace1;
public class LightTank implements ITank {
@Override
public void Run() {
System.out.println("LightTank is running!");
}
@Override
public void Fire() {
System.out.println("Boom!");
}
}
建立一个货车类, 它继承于IVehicle
package InterFace1;
public class Truck implements IVehicle {
@Override
public void Run() {
System.out.println("Truck is running!");
}
}
建立一个普通驾驶员, 这相当于一个数据仓库, 这个驾驶员能传入IVehicle类型的参数 ,屏蔽掉Fire
package InterFace1;
public class Driver {
public Driver(IVehicle vehicle) {
this.vehicle = vehicle;
}
private IVehicle vehicle;
public void Run()
{
vehicle.Run(); //没有了weapon选项
}
}
建立一个超级驾驶员, 这相当于一个数据仓库, 这个驾驶员只能传入ITank 类型的参数, 拥有Fire 和Run 2个方法
package InterFace1;
public class DiverPlus {
public DiverPlus(ITank tank) {
this.vehicle = tank;
}
private ITank vehicle;
public void Run()
{
vehicle.Run();
}
public void Fire()
{
vehicle.Fire();
}
}
在main 函数中实现
package InterFace1;
import com.sun.tools.javac.Main;
public class TestDemon {
public static void main(String[] args) {
// LockDoor lockDoor = new LockDoor();
// lockDoor.openDoor();
// lockDoor.openLock();
// lockDoor.closeDoor();
// lockDoor.closeLock();
// lockDoor.photo();
// System.out.println(LockDoor.a);
ITank heavyTank = new HeavyTank();
DiverPlus heavyTankdriver = new DiverPlus(heavyTank);
heavyTankdriver.Run();
heavyTankdriver.Fire();
System.out.println("------------------------");
//用接口实现多态
//DiverPlus 有2种方法, Run和Fire, 它的构造函数中传入形参的类型为ITank,而ITank继承于IVehicle与IWeapon
ITank lightTank = new LightTank();
DiverPlus lightTankdriver = new DiverPlus(lightTank);
lightTankdriver.Run();
lightTankdriver.Fire();
System.out.println("------------------------");
//Driver 有1种方法, Run, 它的构造函数中传入形参的类型为IVehicle
IVehicle truck = new Truck();
Driver truckDiver = new Driver(truck);
truckDiver.Run();
/*
* ITank继承IVehicle,IVehicle是ITank的父类, Driver的构造函数
public Driver(IVehicle vehicle){}中, IVehicle是父类, 所以 ITank 类型的 lightTank
也可以填入public Driver(IVehicle vehicle) 中, 只是屏蔽掉了Fire方法
左边为父类
*
* */
System.out.println("------------------------");
Driver miniDriver = new Driver(lightTank);
miniDriver.Run();
}
}
结果 :
HeavyTank is running!
Boom!!!!!!!
------------------------
LightTank is running!
Boom!
------------------------
Truck is running!
------------------------
LightTank is running!
Process finished with exit code 0
本文介绍了定义的IVehicle和IWeapon接口,展示了ITank类继承这两个接口并创建 HeavyTank和LightTank实例。同时,Driver和DiverPlus驾驶员的不同行为和ITank的多态应用被详细展示。

被折叠的 条评论
为什么被折叠?



