上图是报的错,下面是程序段
public class Person { public Person(string name, int age) { this._name = name; this._age = age; } private string _name; public string Name { get { return _name; } set { this._name = value; } } private int _age; public int Age { get { return _age; } set { this._age = value; } } public void Show() { Console.WriteLine("我是人"); } } public class Teacher : Person { public void Show() { Console.WriteLine("我是老师"); } }
原因是父类中在没有无参的构造函数
但是为什么子类默认要调用父类的无参的构造函数呢?
是为了实现对象的实例化,不是很明白,再查原因是每一个子类构造函数内第一行都有隐式的 super();在对子类对象进行初始化时,父类的构造函数也会运行。super():会访问父类中空参数的构造函数。super可以理解为是指向自己超(父)类对象的一个指针,而这个超类指的是离自己最近的一个父类。
为什么子类一定要访问父类中的构造函数?
因为父类中的数据子类可以直接获取,所以子类对象在建立时,需要先查看父类是如何对这些数据进行初始化。
如果父类中没有无参构造函数, 那么子类的构造函数内必须通过 super 语句指定要调用的父类中的构造函数.
若子类构造函数中用 this 来指定调用子类自己的构造函数, 那么被调用的构造函数也一样会调用父类中的构造函数.
子类中至少会有一个构造函数会访问父类中的构造函数。