static void Main(string[] args) { //Boss boss = new Boss(); //boss.AI();//父类的公有方法和字段,子类都可以调用 //boss.Attack(); //Console.ReadKey(); //Enemy enemy; //enemy = new Boss();//父类声明的对象,可以使用子类去构造 //Boss boss = (Boss)enemy;//可以用显示转换把enemy强制变成Boss子类,因为本质就是子类 //boss.Attack(); //Enemy1 enemy1 = new Enemy1(); //enemy1.Move(); //Console.ReadKey(); //虚函数的运用 //Boss boss = new Boss(); //boss.AI();//优先级会是自己override过的虚函数 //Console.ReadKey(); //隐藏方法 //Boss boss = new Boss(); //boss.Move(); //Enemy boss2 = new Boss(); //boss2.Move(); //Console.ReadKey(); //抽象类(不可构造,但可以声明) Bird crow1 = new Crow(); crow1.Fly();//很有趣的是,抽象基类声明后的对象,不需要强制转换成子类,也可以直接使用子类的方法咯 Console.ReadKey(); }
static void Main(string[] args) { /*Boss boss = new Boss(); * boss.AI();//继承父类的所有的字段跟函数 * boss.Attack();//子类特有的函数*/ Enemy enemy = new Boss(); //父类声明的对象,可以使用子类去构造,子类声明的对象不可以使用父类构造 //enemy虽然使用了父类声明,但是使用了子类构造,本质上还是一个子类类型,可以使用强制类型转换成子类类型,转换后可调用子类的函数 Boss boss = (Boss)enemy; boss.Attack(); enemy.Move(); //调用的是boss重写后的move方法,因为enemy的类型是子类 enemy.Jump(); //调用的是父类的Jump方法,因为隐藏方法只是被隐藏了,本质上方法还是存在的,用谁声明对象就调用谁的方法 boss.Jump(); //调用子类的Jump方法 //this关键字:1、可以访问当前类中所有的字段和方法 2、编译器提示,方便查看该类有哪些字段和方法 3、区别形参和实参 //base关键字:只能调用父类的字段和方法 Crow crow = new Crow(); crow.Fly(); Bird bird = new Crow();//可以通过抽象类声明对象,子类构造,不可以使用抽象类构造 bird.Fly(); Console.ReadLine(); }