C# 之继承

一、语法介绍

1、继承概念和类型


2、多重继承:C#不支持多重实现继承,但支持多重接口继承



3、虚方法



4、隐藏方法



5、this和base



6、派生类的构造函数



7、修饰符




8、接口






二、语法实践

//继承基类EnemyBase

using System;

namespace 面向对象编程
{
    /// <summary>
    /// 怪物和敌人的基类
    /// </summary>
    class EnemyBase
    {
        public EnemyBase()
        {
            Console.WriteLine("这里是基类的无参构造函数");
        }

        public EnemyBase(int hp)
        {
            this.hp = hp;
            Console.WriteLine("这里是父类的带参的构造函数");
        }

        //公有属性
        private float hp;
        private float speed;
        protected int level;

        public float HP
        {
            get
            {
                Console.WriteLine("获取基类的血量属性 == " + hp);
                return hp;
            }
            set
            {
                Console.WriteLine("设置基类的血量属性 == " + value);
                hp = value;
            }
        }

        public float Speed
        {
            get
            {
                Console.WriteLine("获取基类的速度属性 == " + speed);
                return speed;
            }
            set
            {
                Console.WriteLine("设置基类的速度属性 == " + value);
                speed = value;
            }
        }

        /// <summary>
        /// 公有行为
        /// </summary>
        public void AI()
        {
            ReleaseSkills();
            Console.WriteLine("这里是基类的AI方法");
        }

        /// <summary>
        /// 公有移动
        /// </summary>
        public void Move()
        {
            Console.WriteLine("这里是基类的Move方法");
        }

        /// <summary>
        /// 父类释放技能的虚方法
        /// </summary>
        public virtual void ReleaseSkills()
        {
            Console.WriteLine("这里是基类的ReleaseSkills虚方法");
        }

        public void PlayAnimation()
        {
            Console.WriteLine("这里是基类的PlayAnimation方法");
        }
    }
}
 
 


//怪物子类:Boss

using System;

namespace 面向对象编程
{
    class Boss : EnemyBase
    {
        public void Attack()
        {
            AI();
            Console.WriteLine("这里是Boss类的攻击方法");
        }

        public override void ReleaseSkills()
        {
            Console.WriteLine("这里是Boss类重写的释放技能的方法");
        }
    }
}



//怪物子类:Monster

using System;

namespace 面向对象编程
{
    class Monster : EnemyBase
    {
        private int exp;

        public Monster():base()//使用base会 先调用父类的构造函数,然后调用自身的构造函数
        {
            Console.WriteLine("这里是子类Monster的无参构造函数");
        }

        public Monster(int exp, int hp):base(hp)
        {
            this.exp = exp;
            Console.WriteLine("这里是子类Monster里面的带参的构造函数");
        }

        public void Defence()
        {
            Move();
            Console.WriteLine("这里是Monster类的防御方法");
        }

        public override void ReleaseSkills()
        {
            Console.WriteLine("这里是Monster类重写的释放技能的方法");
        }

        /// <summary>
        /// 父类有与此方法签名相同的方法,此方法会将父类中的方法隐藏(可以在此方法前添加new关键字表示隐藏),使用哪个类声明的调用那个类的方法
        /// </summary>
        public new void PlayAnimation()
        {
            Console.WriteLine("这里是Monster类中的隐藏方法");
        }
    }
}


//实现类

using System;

namespace 面向对象编程
{
    class Program
    {
        static void Main(string[] args)
        {
            //继承
            EnemyBase enemyBase = new Boss();
            Boss boss = (Boss)enemyBase;
            boss.Attack();

            Monster monster = new Monster();
            monster.HP = 100;
            monster.PlayAnimation();

            EnemyBase menemyBase = new Monster();
            menemyBase.PlayAnimation();

            Monster mmonster = new Monster(50, 100);

            Console.ReadKey();
        }
    }
}




猜你喜欢

转载自blog.csdn.net/wanddoudou/article/details/80705168