一、语法介绍
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();
}
}
}