//多态 模拟 移动硬盘 插入电脑 读写,方法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(); //} } }