概念
继承就是子承父业,子类继承父类的字段(数据成员)和方法
合理继承?
继承关系需要符合逻辑不能为了继承而继承,只有当一个类在逻辑上属于另一个类时(老虎属于动物,树属于植物)继承就是合理的
同时一个类只能有一个父类 即单继承类
使用方法
class Animal
{
}
class Tiger:Animal //Tiger 类继承 Animal类
{
}
base
base有点类似c++中的this
在子类中可以使用base调用父类的方法 也可以在子类构造函数的初始化列表调用父类的构造构造函数,但是在静态类中不能使用base
class Program
{
static void Main(string[] args)
{
Tiger t = new Tiger("胖虎");
t.Test();//输出胖虎
}
class Animal //父类
{
public Animal(string name)
{
_name = name;
}
protected string _name;
public void PrintName()
{
Console.WriteLine(_name);
}
}
class Tiger:Animal
{
public Tiger(string name):base(name) //使用base在初始化列表调用父类构造函数
{
}
public void Test()
{
base.PrintName(); //调用父类的函数
}
}
}
overide与new
override用与重写父类的virtual或abstract 方法
new
我们大多数认为new是用于创建对象的
但new还有另一个用法:用于修饰子类中与父类重名的方法表示覆盖
在子类中此方法将覆盖从父类中继承过来的同名方法 但是不会改变父类中的同名方法
class Program
{
static void Main(string[] args)
{
Tiger t = new Tiger("胖虎");
t.PrintName(); //输出 print tiger name:胖虎
}
class Animal
{
public Animal(string name)
{
_name = name;
}
protected string _name;
public void PrintName()
{
Console.WriteLine(_name);
}
public virtual void Eat()
{
Console.WriteLine("animal eat");
}
}
class Tiger:Animal
{
public Tiger(string name):base(name)
{
}
public override void Eat() //子类重写父类方法
{
Console.WriteLine("tiger eat");
}
public new void PrintName() //覆盖父类同名方法
{
Console.WriteLine("print tiger name:{0}",_name);
}
}
}