base关键字

时间:2022-02-03 08:01:50

base关键字      专门用来在子类访问父类成员

base.标识符:“.”调用父类同名属性、同名函数、构造函数

 ()父类person
public class Person
{
public Person()
{
Console.WriteLine("Person()");
} public Person(string name, int age)
{
Console.WriteLine("Person(string name, int age)");
this.name = name;
this.age = age;
} protected string name;
protected int age;
protected string strWords = string.Empty; public void SayHi()
{
Console.WriteLine("大家好,我叫{0},我今年{1}岁了{2}", name, age, strWords);
} ()子类student
public class Student:Person
{
//子类构造函数会自动调用父类无参构造函数
public Student(string name, int age)
{
this.strWords = strWords;
}
//子类构造函数可以显示的调用父类构造函数
public Student(string name, int age, string strWord)
: base(name, age)//显示的调用 父类构造函数
{
this.strWords = strWords;
}
} ()子类teacher
public class Teacher:Person
{
double salary; public Teacher(string name, int age, string strWord)
{
base.name = name;
base.age = age;
base.strWords = strWords;
//base.name //base 只能访问到父类的非私有成员
//this.salary//this可以访问到子类的所有成员和父类的非私有成员
}

a)base

  调用父类中非私有的成员(调用成员,父类)base点不出子类独有成员。

  调用父类中的构造函数(调用构造函数,父类)

  当调用从父类中继承过来的成员的时候,如果子类没有重写则this.成员;与base.成员,没有区别。

b)如果子类重写了父类成员,则this.成员;调用的是子类重写以后的。base.成员;调用的依然是父类的成员。

c)子类构造函数默认调用父类的无参构造函数;

d)如果父类没有无参构造函数,则必须指明调用父类哪个构造函数