1.抽象类的标记是abstract,并且不能实现,为了可以被继承,只能使用private修饰符。
2.抽象成员必须存在于抽象类中。
3.抽象类不能实例化。
4.子类继承抽象类需要实现所有抽象类方法。
5.在抽象类中可以包含实例成员,实例成员可以不被子类实现。包括字段属性和构造函数等。
6.抽象类是有构造函数的。虽然不能被实例化。
7.如果父类的抽象方法中有参数,那么。继承这个抽象父类的子类在重写父类的方法的时候必须传入对应的参数。
如果父类中的方法有默认的实现,并且父类需要被实例化,这时可以考虑将父类定义成一个普通类,用虚方法来实现多态。
如果父类中的方法没有默认实现,父类也不需要被实例化,则可以将该类定义为抽象类。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace 抽象类
{
class Program
{
static void Main(string[] args)
{
MobileDisk md = new MobileDisk();
MP3 mp3 = new MP3();
UDisk udisk = new UDisk();
Computer cpu = new Computer();
cpu.MS = mp3;
cpu.CpuRead();
mp3.PlayMusic();
Console.ReadKey();
}
}
abstract class MobileStorage
{
public abstract void Read();
public abstract void Write();
}
class MobileDisk : MobileStorage
{
public override void Read()
{
Console.WriteLine("移动硬盘read");
}
public override void Write()
{
Console.WriteLine("移动硬盘write");
}
}
class UDisk : MobileStorage
{
public override void Read()
{
Console.WriteLine("U盘read");
}
public override void Write()
{
Console.WriteLine("U盘write");
}
}
class MP3 : MobileStorage
{
public override void Read()
{
Console.WriteLine("MP3read");
}
public override void Write()
{
Console.WriteLine("MP3write");
}
public void PlayMusic()
{
Console.WriteLine("MP3Play");
}
}
class Computer
{
public MobileStorage MS { get; set; }
public void CpuRead( )
{
this.MS.Read();
}
public void CpuWrite()
{
this.MS.Write();
}
}
}