第六章 初始继承和多态
继承:一个类可以使用另一个类的属性和方法(成为该类的成员)
子类继承父类使用的符号是冒号
子类不能继承父类的构造方法
子类不能访问父类的私有字段和方法
在调用子类构造的时候,没有使用base关键字调用父类的指定构造,那么默认调用父类的无参构造。
定义一个Person类
class Person
{
public string Name { get; set; }
public Gender Sex { get; set; }
public void SayHello()
{
}
public Person()
{
}
public Person(string name, Gender sex)
{
this.Name = name;
this.Sex = sex;
}
定义一个Chinese类 继承自Person
class Chinese:Person
{
public int Age { get; set; }
public Chinese()
{
}
public Chinese(string name, int age, Gender sex)
{
this.Age = age;
this.Name = name;
this.Sex = sex;
}
}
定义枚举 性别 Male,Female
public enum Gender
{
Female=0,Male=1
}
Chinese cn=new Chinese(“”,18,Gender.Male)
指向子类构造→不进入子类构造赋值→进入父类的构造体→回到子类构造→执行子类构造题,子类构造体执行完毕→跳转到Main→在内存中构建出Chinese
如果new一个子类对象,那么有如下执行流程
1.定位到子类对应构造函数,没有执行子类方法
2.转向父类的无参构造函数,执行父类构造方法体
3.专项子类方法体继续进行
(使用base关键字执行指定的父类构造函数)
Base关键字
base.父类成员 base.父类方法
Base关键字可以调用父类成员 方法 和构造
public Chinese(string name, int age, Gender sex):base(name,sex)
{
this.Age = age;
}
base(参1,参2)的顺序根据父类构造参数的参数顺序保持一致,但是变量名是和子类构造的参数变量名一致
public Person(Gender sex, string name)//修改父类参数顺序
子类调用参数的顺序需要变化
public Chinese(string name, int age, Gender sex):base(sex,name)
{
this.Age = age;
}
protected访问修饰符
访问修饰符private 私有的 只能在当前类使用
protected只能在该类和与其有继承关系的子类中使用
public可以在任何地方使用
继承的两大特性
单根性 一个类只能有一个直接父类
传递性 A是B的父类 B是C的父类 C仍然可以继承A的属性和方法
多态:不同的对象对于同一个操作做出的响应不同
多态目的是为了统一调用