3-10 练习
练习
抽象类 Carrier 载具,他有抽象方法Run,正常属性Name载具名。
逃生系统接口 IEscape , 有一个Escape方法;
武器系统 IWeapon,有OpenFire方法和Reload方法。
建立三个载具的子类,Car,Boat,Plane,继承载具。
建立若干个具体的类(具体车船飞机型号),继承自Car、Boat和Plane,根据实际情况,为这些类选择性的继承武器和逃生接口。
建立Carrier列表,以及IEscape和IWeapon的两个列表,把建立的实例丢到列表中。
对于载具列表,显示"XXX起航"/"XXX起飞"/"XXX启动",武器调用Reload和OpenFire,逃生设备,调用Escape;
using System;
using System.Collections;
using System.Collections.Generic;
using System.Threading;
namespace Test4
{
class Program
{
static void Main()
{
List<Carrier> carrierList = new List<Carrier>();
List<IWeapon> weaponList = new List<IWeapon>();
List<IEscape> escapeList = new List<IEscape>();
var f22 = new F22();
var da = new DaJiang();
var tai = new TaiTangNiKe();
var qian = new QianShuiTing();
var tank = new Tank95();
var wu = new WuLinHongGuang();
carrierList.Add(f22);
carrierList.Add(da);
carrierList.Add(tai);
carrierList.Add(qian);
carrierList.Add(tank);
carrierList.Add(wu);
weaponList.Add(f22);
weaponList.Add(qian);
weaponList.Add(tank);
escapeList.Add(f22);
escapeList.Add(tai);
escapeList.Add(qian);
foreach (var item in carrierList)
{
item.Run();
}
foreach (var item in weaponList)
{
item.Reload();
item.OpenFire();
}
foreach (var item in escapeList)
{
item.Escape();
}
Console.ReadKey();
}
}
public class DaJiang : Plane
{
public DaJiang() : base("大疆无人机")
{
}
}
public class F22 : Plane, IWeapon, IEscape
{
public F22() : base("F22")
{
}
public void Escape()
{
Console.WriteLine("射出");
}
public void OpenFire()
{
Console.WriteLine("发射导弹");
}
public void Reload()
{
Console.WriteLine("导弹装填");
}
}
public class TaiTangNiKe : Boat, IEscape
{
public TaiTangNiKe() : base("泰坦尼克")
{
}
public void Escape()
{
Console.WriteLine("典藏木板");
}
}
public class QianShuiTing : Boat, IWeapon, IEscape
{
public QianShuiTing() :base("潜水艇"){
}
public void Escape()
{
Console.WriteLine("射出");
}
public void OpenFire()
{
Console.WriteLine("发射鱼雷");
}
public void Reload()
{
Console.WriteLine("鱼雷装填");
}
}
public class WuLinHongGuang : Car
{
public WuLinHongGuang() : base("五菱宏光")
{
}
}
public class Tank95 : Car, IWeapon
{
public Tank95() : base("95式坦克")
{
}
public void OpenFire()
{
Console.WriteLine("穿甲弹发射");
}
public void Reload()
{
Console.WriteLine("穿甲弹装填");
}
}
public class Car : Carrier
{
public Car(string name)
{
Name = name;
}
public override void Run()
{
Console.WriteLine(Name + "启动");
}
}
public class Boat : Carrier
{
public Boat(string name)
{
Name = name;
}
public override void Run()
{
Console.WriteLine(Name + "起航");
}
}
public class Plane : Carrier
{
public Plane(string name)
{
Name = name;
}
public override void Run()
{
Console.WriteLine(Name + "起飞");
}
}
public interface IEscape
{
void Escape();
}
public interface IWeapon
{
void OpenFire();
void Reload();
}
public abstract class Carrier
{
public abstract void Run();
public string Name { get; set; }
}
}