美文网首页
009_面向对象编程_继承。

009_面向对象编程_继承。

作者: 立秋i | 来源:发表于2018-05-21 15:51 被阅读0次

    namespace _009_面向对象编程_继承 {

        abstract class Bird//一个抽象类 就是一个不完整的模板

        {

            private float speed;

            public void Eat()

            {

            }

            public abstract void Fly();

        }

    }

    ———————————————————————————————————————————————————————————————

    namespace _009_面向对象编程_继承 {

        class Boss : Enemy{

            //public override void Move()//重写 : 原来的方法不存在了

            //{

            //    Console.WriteLine("这里是Boss的移动方法");

            //}

            public new void Move()//当子类里面有一个签名和父类相同的方法的时候,就会把父类中的方法隐藏

            {//隐藏: 只是把父类中的方法隐藏了,看不到了,实际这个方法还存在

                Console.WriteLine("这里是Boss的移动方法");

            }

            public void Attack()

            {

                //AI();

                //Move();

                ////hp = 100;

                //HP = 100;//父类里面公有是数据和函数成员才可以在子类里面访问

                Move();

                Console.WriteLine("Boss正在进行攻击");

            }

        }

    }

    ———————————————————————————————————————————————————————————————

    namespace _009_面向对象编程_继承 {

        class Crow:Bird {//我们继承了一个抽象类的时候,必须去实现抽象方法

            public override void Fly()

            {

                Console.WriteLine("乌鸦在飞行");

            }

        }

    }

    ———————————————————————————————————————————————————————————————

    namespace _009_面向对象编程_继承 {

        class Enemy

        {

            private float hp;

            private float speed;

            public float HP

            {

                get { return hp; }

                set { hp = value; }

            }

            public float Speed

            {

                get { return speed; }

                set { speed = value; }

            }

            public void AI()

            {

                //Move();

                Console.WriteLine("这里是Enemy1的公有AI方法");

            }

            //public virtual void Move()

            //{

            //    Console.WriteLine("这里是Enemy1的公有Move方法");

            //}

            public void Move()

            {

                Console.WriteLine("这里是Enemy1的公有Move方法");

            }

            public void A()

            {

                Console.WriteLine("Enemy A");

            }

        }

    }

    ———————————————————————————————————————————————————————————————

    namespace _009_面向对象编程_继承 {

        class Program {

            static void Main(string[] args) {

                //Boss boss = new Boss();

                ////boss.AI();//继承:父类里面所有的数据成员和函数成员都会继承到子类里面

                //boss.Attack();

                //Enemy enemy;

                //enemy = new Boss();//父类声明的对象,可以使用子类去构造  子类声明的对象不可以使用父类构造

                ////enemy虽然使用父类进行了声明,但是使用了子类构造,所以本质上是一个子类类型的,我们可以强制类型转换转换成子类类型

                //Boss boss = (Boss)enemy;

                //boss.Attack();

                //Enemy enemy = new Enemy();

                //Boss boss =(Boss) enemy;//一个对象是什么类型的  主要看它是通过什么构造的  这里enemy使用了父类的构造函数,所以只有父类中的字段和方法, 不能被强制转换成子类

                //Boss boss = new Boss();

                ////boss.Attack();

                //boss.AI();

                //Enemy enemy = new Enemy();

                //enemy.AI();

                //Enemy boss = new Boss();

                //boss.Move();//隐藏方法: 如果使用子类声明的对象,调用隐藏方法会调用子类的,如果使用父类声明对象,那么就会调用父类中的隐藏方法

                //Crow crow = new Crow();

                //crow.Fly();

                //Bird bird = new Crow();//我们可以通过抽象类去声明对象 但是不可以去构造

                //bird.Fly();

                Console.ReadKey();

            }

        }

    }

    ———————————————————————————————————————————————————————————————

    namespace _009_面向对象编程_继承 {

        class Type1Enemy:Enemy {

        }

    }

    ———————————————————————————————————————————————————————————————

    namespace _009_面向对象编程_继承 {

        class Type2Enemy:Enemy {

        }

    }

    相关文章

      网友评论

          本文标题:009_面向对象编程_继承。

          本文链接:https://www.haomeiwen.com/subject/ttafjftx.html