类的继承
今天讲到了父类与子类的关系、虚继承(virtual/override)、子类的方法重写(new)、子类中基类(父类)的构造函数(base)等。
父类与子类的关系:
父类中权限是public(公有权限)的字段、方法都可以在子类中继承,也就是说如果类b继承与类a,那么类b中有类a中权限为public(公有权限)的除构造函数、析构函数以外的所以字段和方法,并可以直接使用。
如果在父类中不写public(公有权限)的字段,默认为private(私有权限),这种权限在子类中不可以直接使用,要通过父类中的public(公有权限)的方法来使用。
还有一种权限是protect(保护权限),这种权限可以让父类中的字段或者方法在子类中用,但不可以离开类体且不在子类中用。
虚继承:
class Fulei
{
public virtual void obj()
{
Console.Writeline("这是父类。");
}
}
class Zilei:Fulei
{
public override void obj()
{
Console.Writeline("这是子类。");
}
}
(例1-1)
这样在父类在用子类初始化的时候,父类的obj讲输出“这是子类。”
子类的方法重写:
class Fulei
{
public void obj()
{
Console.Writeline("这是父类。");
}
}
class Zilei:Fulei
{
new public void obj()
{
Console.Writeline("这是子类。");
}
}
(例1-2)
当在Zilei a=new Zilei();中的a.obj()里,输出的将是“这是子类。”,而在Fulei b=new Fulei();中的b.obj()里,输出的则是“这是父类。”。当在子类的方法前不写new的时候,系统一般会自动添加一个new。
子类中基类(父类)的构造函数:
如果在父类中有构造函数如下:
public Fulei(string name)
{
this.name=name;
}
那么在子类中的构造函数就应该如下:
public Zilei(string name):base(name)
{
}
子类中的构造函数体即便为空,也要写,因为要调用父类的构造函数并传参数给父类的构造函数,即:base(name)。