//多态 模拟 移动硬盘 插入电脑 读写,方法1传参,方法2属性赋值
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
//多态 模拟 移动硬盘 插入电脑 读写
//MobileDisk md = new MobileDisk();//父类抽象类不能实例化,所以实例化子类
//UDisk ud = new UDisk();
//Mp3 mp = new Mp3();
MobileStorage mp = new Mp3();
Computer cpu = new Computer();//通过属性拿到父类,在外面不能传参数,采用赋值
cpu.Ms = mp;//表示把插入的MP3赋值给电脑里面的Ms属性
//cpu.CpuRead(mp);
//cpu.CpuWrite(mp);
cpu.CpuRead();//采用属性赋值形式,不用传参数
cpu.CpuWrite();
Console.ReadKey();
}
}
/// <summary>
/// 抽象的父类,可移动存储
/// </summary>
public abstract class MobileStorage
{
public abstract void Read();
public abstract void Write();
}
public class MobileDisk : MobileStorage
{
public override void Read()//override可以重写抽象方法和虚方法
{
Console.WriteLine("移动硬盘在读取数据");
}
public override void Write()
{
Console.WriteLine("移动硬盘在写入数据");
}
}
public class UDisk : MobileStorage
{
public override void Read()
{
Console.WriteLine("U盘在读取数据");
}
public override void Write()
{
Console.WriteLine("U盘在写入数据");
}
}
public class Mp3 : MobileStorage
{
public override void Read()
{
Console.WriteLine("Mp3在读取数据");
}
public override void Write()
{
Console.WriteLine("Mp3在写入数据");
}
public void PlayMusic()
{
Console.WriteLine("MP3自己可以播放音乐");
}
}
public class Computer
{
//方法2,拿字段存传入的父类参数
private MobileStorage _ms;
public MobileStorage Ms//字段封装属性
{
get { return _ms; }
set { _ms = value; }
}
public void CpuRead()//方法1,想拿到父类,传参数进来就行,可以传子类进来
{
Ms.Read();//方法2,通过属性拿到父类,在外面不用传参数,采用赋值
}
public void CpuWrite()
{
Ms.Write();
}
//public void CpuRead(MobileStorage ms)//方法1,想拿到父类,传参数进来就行,可以传子类进来
//{
// ms.Read();
//}
//public void CpuWrite(MobileStorage ms)
//{
// ms.Write();
//}
}
}