-
创建对象的时候,调用的是子类构造方法。 执行的时候会依次向上调用,最后从上到下执行构造方法,初始化对象;
-
默认构造方法的时候,调用的都是无参构造方法;
-
一旦在父类中添加有参构造函数是,子类在创建时仍然会调用父类的无参构造方法,但是,父类中存在有参构造方法,系统不会再提供默认的构造方法,如果不手动添加无参的构造方法,则运行时会报错。
-
如果不想调用父类的默认构造方法(无参构造方法),而父类中手动添加了有参构造函数,则只需要在子类构造方法参数的圆括号候加:base(参数) 如下例:
person 定义如下:
class Person { // 私有变量只能在本类中进行访问 private string name; private int age; private char gender; public Person(string name, int age, char gender)//:base() 默认调用object类的构造方法
{ this.name = name; this.age = age; this.gender = gender; } public string Name { get { return this.name; } } public int Age { get { return this.age; } } public char Gender { get { return this.gender; } } }
Chiese 定义如下:
class Chinese:Person
{
// 中国人特有的属相
private ShuXiang shuXiang;
public Chinese(string name, int age, char gender, ShuXiang shuXiang) // 方法定义
: base(name, age, gender) // 调用父类的构造方法 // 方法调用
{
// 为子类特有的字段进行初始化
this.shuXiang = shuXiang;
}
public void SayHello()
{
Console.WriteLine("你好我是中国人,我叫{0},今年{1}岁了,我是{2}生",
// this.Name, this.Age, this.Gender
// Name, Age, Gender
base.Name, base.Age, base.Gender
);
/*
* 此时使用this表示类型Chinese具有这些属性
* 虽然没有再类中提供,但是使用继承得到了父类的属性
*
* 此处不适用this是表示不会与局部变量冲突,默认的时候就是this
*
* 使用base表示的是制定调用的父类成员
*/
}
public ShuXiang Shuxiang
{
get {
return this.shuXiang;
}
}