namespace Lesson18_多态_抽象类和抽象方法 { #region 知识点一 抽象类 //概念 //被抽象关键字abstract修饰的类 //特点: //1.不能被实例化的类 //2.可以包含抽象方法 //3.继承抽象类必须重写其抽象方法 abstract class Thing { //抽象类中封装的知识点都可以用 public string name; //可以在抽象类中写抽象函数 } class Water : Thing { } #endregion #region 知识点二 抽象函数 //又叫 纯 虚方法 //用abstract关键字修饰的方法 //特点: //1.只能在抽象类中声明 //2.没有方法体 //3.不能是私有的 //4.继承后必须实现 用override重写 abstract class Fruit { public string name; public abstract void Bad();//抽象方法 是一定不能有函数体的(大括号什么的)并且在子类中必须重写 public virtual void Test()//虚方法可以不重写 { } } class Apple : Fruit { public override void Bad() { Console.WriteLine(); } } class SuperApple : Apple { public override void Bad() { base.Bad(); } public override void Test() { base.Test(); } } #endregion internal class Program { static void Main(string[] args) { //抽象类不能被实例化 //Thing t = new Thing(); //遵循里氏替换原则 Thing water = new Water(); } } //总结: //如何选择普通类和抽象类? //不希望被实例化的对象,比较笼统的对象 //例如:水果,人,事情 //或 父类中的行为不太需要被实现的,只希望子类区定义具体的规则的 //可以选择抽象类 }