抽象类(abstract 定义抽象类的关键字)
C# 允许把类声明为抽象类 抽象类可以包含普通函数与抽象函数
类是一个模板 那么抽象类就是一个不完整的模板 不完整的模板使用时不能构造对象 (不能实例化)
抽象类在定义成员时与普通类一致 主要作用体现在使用类时
定义抽象类是为了防止误操作 所以把类定义为抽象类 抽象类可以被继承
(抽象类其实就是一个大的基类模板,不可以实例化,只能继承给子类使用)
抽象方法
抽象方法是基类中的一个声名
比如模拟攻击 每个攻击方式不一样 所以每个子类在继承这个类的时候 按照前面的知识可以使用(虚方法 重写 隐藏方法new ) 对于每个子类中的方法来说 都需要重写这个方法逻辑 那么父类(模板)中的方法逻辑就没有必要存在了 那么就只做一个声明就可以了注:抽象方法不能有 方法体即 “{}”
public abstract void Ai();
抽象类 Class1(基类)
abstract class Class1
{
//字段
public string name;
public int age;
private int id;
//属性
public string Name
{
get
{
return name;
}
set
{
name = value;
}
}
//虚方法
public virtual void Move()
{
Console.WriteLine("移动");
}
//抽象方法
public abstract void Ai();
}
Class2继承抽象类Class1
//继承抽象类Class1
internal class Class2 : Class1
{
public override void Ai()
{
Console.WriteLine("小兵的普攻");
}
}
Boss继承抽象类Class1
子类继承抽象类 如果抽象类中定义了有抽象方法 子类就必须去实现这个方法怎么实现?
答:通过override重写
internal class Boss : Class1
{
//通过override重写
public override void Ai()
{
Console.WriteLine("Boss的大招");
}
public override void Move()
{
Console.WriteLine("Boss的移动");
}
}
主函数中创建类的对象
static void Main(string[] args)
{
//使用抽象类
//Class1 c1 = new Class1(); // 抽象类不能被实例化
//抽象了我们可以理解为就是一个供其它类继承的模板
Boss b1 = new Boss();
b1.name = "泰坦";
Console.WriteLine(b1.Name);
b1.Move();
//b1.Ai();
Class1 c1 = new Boss();//父类函数子类构造
Class2 c2 = new Class2();
c1.name = "怪兽";
Console.WriteLine(c1.Name);
c1.Move();
c2.Move();
}