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

2018-05-21  本文已影响0人  立秋i

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 {

    }

}

上一篇下一篇

猜你喜欢

热点阅读