继承是什么?
在上⼀节课中学习了如何定义类,⽤类当做模板来声明我们的数据。
很多类中有相似的数据,⽐如在⼀个游戏中,有Boss类,⼩怪类Enemy,这些类他们有
很多相同的属性,也有不同的,这个时候我们可以使⽤继承来让这两个类继承⾃同⼀个类。
实现继承:
表⽰⼀个类型派⽣于⼀个基类型,它拥有该基类型的所有成员字段和函数。 在实现继承中,派⽣类型采⽤基类型的每个函数的实现代码,除⾮在派⽣类型的定义中指定重写某个函数的实现代码。 在需要给现有的类型添加功能,或许多相关的类型共享⼀组重要的公共功能时,这种类型的继承⾮常有⽤。
接⼝继承:
表⽰⼀个类型只继承了函数的签名,没有继承任何实现代码。 在需要指定该类型具有某些可⽤的特性时,最好使⽤这种类型的继承。
多重继承
⼀些语⾔(C++)⽀持所谓的 “多重继承”,即⼀个类派⽣⾃多个类。
使⽤多重继承的优点是有争议的:
如前所述,简化健壮代码的编写⼯作是开发 C#的重要设计⽬标。因此,C#不⽀持多重实现继承。 ⽽ C#允许类型派⽣⾃多个接口— — 多重接⼝继承。 这说明,C#类可以派⽣⾃另⼀个类和任意多个接⼝。
更准确地说,
System.Object 是⼀个公共的基类,所以每个C#(除了Object类之外)都有⼀个基类,还可以有任意多个基接⼝。
如果要声明派⽣⾃另⼀个类的⼀个类,就可以使⽤下⾯的语法:
c#class MyDerivedClass : MyBaseclass
{
// functions and data members here
}
如果类(或 结构)也 派⽣ ⾃ 接⼝,则⽤逗号分隔列表中的基类和接口:
c#public class MyDerivedClass: MyBaseClass , IInterface1 , IInterface2
{
// etc.
}** **
c#//基类 BaseClass.cs
class BaseClass
{
public int data1;
public string data2;
public void Function1()
{
Console.WriteLine("BaseClass:Function1");
}
public void Function2()
{
Console.WriteLine("BaseClass:Function2");
}
}
c#//派生类 DrivedClass1.cs
class DrivedClass1:BaseClass
{
public int data3;
public void FunctionDrivedClass1()
{
Console.WriteLine("FunctionDrivedClass1");
}
}
c#//使用 Program.cs
BaseClass bc = new BaseClass();
bc.Function1();
bc.Function2();
DrivedClass1 dc1 = new DrivedClass1();
dc1.Function1();
dc1.Function2();
案例实现
基类敌⼈类( hp speed ⽅法 ai move )
c#//新建基类 Enemy.cs
class Enemy
{
protected int hp;// private protected public
protected int speed;
public void AI()
{
Console.WriteLine("AI");
}
public void Move()
{
Console.WriteLine("Move");
}
}
派⽣出来两个类
c#//新建类 boss.cs
class Boss:Enemy
{
private int attack;
private int hp;
public Boss(int attack,int hp,int speed)
{
this.attack = attack;
base.hp = hp;
base.speed = speed;
}
public void Skill()
{
Console.WriteLine("Boss Skill");
}
public void Print()
{
Console.WriteLine("HP:" + hp);
Console.WriteLine("Base.HP:" + base.hp);
Console.WriteLine("Speed:" + speed);
Console.WriteLine("Attack:" + attack);
}
}
c#//新建类 Type1Enemy.cs
class Type1Enemy:Enemy
{
}
c#//新建类 Type2Enemy.cs
class Type2Enemy:Enemy
{
}
c#//使用 Program.cs
Boss boss1 = new Boss(100,100000,20);
boss1.Print();
this(base)作⽤:
this可以访问当前类中定义的字段,属性和⽅法,有没有this都可以访问,有this以让IDE VS编译器给出提⽰,另外当⽅法的参数跟字段重名的时候,使⽤this可以表明访问的是类中的字段,base只可以调⽤⽗类中的公有⽅法和字段,有没有base都可以访问,但是加上base.IED⼯具会给出提⽰,把所有可以调⽤的字段和⽅法罗列出来⽅便选择