base关键字 专门用来在子类访问父类成员
base.标识符:“.”调用父类同名属性、同名函数、构造函数
1 (1)父类person 2 public class Person 3 { 4 public Person() 5 { 6 Console.WriteLine("Person()"); 7 } 8 9 public Person(string name, int age) 10 { 11 Console.WriteLine("Person(string name, int age)"); 12 this.name = name; 13 this.age = age; 14 } 15 16 protected string name; 17 protected int age; 18 protected string strWords = string.Empty; 19 20 public void SayHi() 21 { 22 Console.WriteLine("大家好,我叫{0},我今年{1}岁了{2}", name, age, strWords); 23 } 24 25 (2)子类student 26 public class Student:Person 27 { 28 //子类构造函数会自动调用父类无参构造函数 29 public Student(string name, int age) 30 { 31 this.strWords = strWords; 32 } 33 //子类构造函数可以显示的调用父类构造函数 34 public Student(string name, int age, string strWord) 35 : base(name, age)//显示的调用 父类构造函数 36 { 37 this.strWords = strWords; 38 } 39 } 40 41 (3)子类teacher 42 public class Teacher:Person 43 { 44 double salary; 45 46 public Teacher(string name, int age, string strWord) 47 { 48 base.name = name; 49 base.age = age; 50 base.strWords = strWords; 51 //base.name //base 只能访问到父类的非私有成员 52 //this.salary//this可以访问到子类的所有成员和父类的非私有成员 53 }
a)base
调用父类中非私有的成员(调用成员,父类)base点不出子类独有成员。
调用父类中的构造函数(调用构造函数,父类)
当调用从父类中继承过来的成员的时候,如果子类没有重写则this.成员;与base.成员,没有区别。
b)如果子类重写了父类成员,则this.成员;调用的是子类重写以后的。base.成员;调用的依然是父类的成员。
c)子类构造函数默认调用父类的无参构造函数;
d)如果父类没有无参构造函数,则必须指明调用父类哪个构造函数