一.继承概述
1.继承是指子类可以继承父类可被继承的属性、字段和方法等,然后只需要再定义属于自己独特的成员即可 (这里的成员代表的是:成员变量和成员方法)
2.:表示继承关系,如下代码,一个鸟类继承了动物类
class Bird:Animal{
//Bird后面的:号表示继承关系的符号
}
二.继承的实现
1.继承的三大特性
(1.)继承的传递性。 大雁继承与鸟类,鸟类继承于动物类,那么大雁不仅具有鸟类的特征和行为而且还具有动物类的特征和行为
(2.)继承的单根性。 一个之类只能有一个父类,一个父类可以有多个子类
(3.)成员的访问性。 无论父类成员定义为public还是private都能被子类继承,只不过定义为private的成员不能被直接访问,比如被封装的字段可以通过属性来间接访问,如果没有属性可以通过在方法里面来间接访问私有的字段
子类是对父类的扩展,子类不仅能继承父类可被继承的成员,还可以新增成员,但不能去除已经继承的成员
2.继承的运用
(1.)构造方法
1.在C#中,子类在实例化时会先隐式调用父类的无参构造方法,再调用自身的构造方法,如果父类没有无参构造方法则提示错误
2.父类其实有一个隐藏的无参构造方法,所以父类没写无参构造方法,子类实例化时候也不会报错,但如果父类手动书写了一个有参构造方法,则会将那个隐藏的无参构造函数给覆盖,此时必须手动给父类书写一个无参构造方法,否则子类实例化对象的时候就会报错
(2.)this关键字和base关键字
1.在子类中,可以使用this关键字访问本类成员,使用base关键字访问父类成员
class Animal
{
public Animal()
{
Console.WriteLine("这是动物类的无参构造方法");
}
public Animal(string name) : this()
{
this.Name = name;
Console.WriteLine("这是动物类的有参构造方法");
}
private string name;
public string Name {
get => name; set => name = value; }
public void Show()
{
Console.WriteLine("{0}发出了叫声", this.Name);
}
}
class Program
{
static void Main(string[] args)
{
Animal b = new Animal("老虎");
}
}
从这个代码示例中可以看出,有参构造方法使用“:”继承了无参构造方法,所以先执行被继承的无参构造方法,再允许有参构造方法,同时把行参name属性赋值给了自己的属性Name
具体细节查看书本p131和p132
3.is-a关系