抽象类
有些类存在的意义就是为了让别的类继承。自己本身不应该具有实例。例如
class 单位
{
public int 生命;
}
class 建筑 : 单位
{
public int 护甲;
}
class 英雄 : 单位
{
public int 护盾;
}
class 小兵 : 单位
{
public int 经验;
}
可以使用abstract把他声明为抽象类。
抽象类仍然存在构造器,可以供派生类访问。
但抽象类的构造器不能配合new来构造他的类型。
即使是在自己的类里面。
因为抽象类必须通过继承来实现功能,所以抽象类不能声明为密封类。
抽象成员
在抽象类中,可以使用abstract声明抽象成员。抽象成员也是虚成员,可以在派生类中被重写。
但抽象成员本身无法定义主体逻辑。抽象方法在参数列表后直接以分号结尾,抽象属性不会成为自动实现属性。
abstract class 食物
{
public abstract int 饱食度 { get; }
}
class 牛肉 : 食物
{
public override int 饱食度 => 15;
}
抽象成员往往是完全无法预测应该如何实现的成员。
非抽象类继承抽象类时,必须重写所有抽象成员(所以抽象成员是无法被隐藏的)。
抽象类可以从非抽象类继承而来,并可以使用抽象方法重写虚成员。
abstract class 牛肉制品 : 牛肉
{
public override abstract int 饱食度 { get; }
}
class 牛肉丸子 : 牛肉制品
{
public override int 饱食度 => 20;
}