抽象类
抽象类在声明类时添加abstract来创建抽象类,如果抽象类中包含抽象方法,则继承的派生类必须要使用override实现抽象类的重写。
注意:
(1)不能在抽象类外部声明抽象方法。
(2)不能创建抽象类的实例。
(3)不能将抽象类声明为sealed(密封类,不能被继承)
抽象类重写
abstract class Name //名字类
{
public abstract string PrintName();
}
class ChineseName:Name //中文名
{
private string chineseName;
public ChineseName() //构造函数
{
chineseName = "小王";
}
public override string PrintName()
{
return chineseName;
}
}
......
ChineseName cn = new ChineseName();
Console.WriteLine("{0}", cn.PrintName());
运行结果:小王
虚方法
虚方法则是在基类用带有virtual修饰符的方法,用法跟抽象类相似,也是在基类中声明然后再派生类中用override修饰符覆盖基类虚方法,表明对虚方法进行重载。
虚方法重载
abstract class Name //名字类
{
public virtual string PrintName()
{
return null;
}
}
class ChineseName : Name //中文名
{
private string chineseName;
public override string PrintName()
{
chineseName = "小刚";
return chineseName;
}
}
......
ChineseName cn = new ChineseName();
Console.WriteLine("{0}", cn.PrintName());
运行结果:小刚
既然两种方法都可以对基类方法进行重载,那有什么区别呢,区别如下:
(1)抽象类方法只能在抽象类中声明,而虚方法则不受限制。
(2)抽象类的派生类必须要重载抽象方法,而虚方法不必。
(3)虚方法必须有实现部分,而抽象类没有提供实现部分。