一、继承的基础
理论:在生活中,物质的继承,房子的所有权的继承,由A户主到B户主或其他户主。软件中的继承就是类与类之间的关系
继承的单根性:A类=>B类=>C类(单向传递,不能循环继承、多项继承,反向继承)
使用继承可以更好对相同特征的对象进行代码复用、多态拓展
优点:1、提高代码的复用性,子类拥有父类的属性和方法
2、可拓展性,子类可以有不同于父类,拥有自己的特性(行为和属性)
缺点:1、具有侵入性、高耦合,不够灵活,在一定程序上约束了子类,使用里氏替换原则原则可以优化这一问题
2、父类的修改需要考虑子类的影响。
二、继承的拓展、复用
里氏替换原则原则是继承复用代码的基石,通过这个原则可以实现多态。
1、抽象类
由abstract修饰的类叫做抽象类,抽象类可以没有抽象的方法。如果抽象类中存在抽象的方法,则在被子类继承时,抽象方法必须被重写实现。
抽象方法:由abstract关键字修饰,需要在抽象类中规定方法名,不需要实现具体业务(方法体),实现时通过override修饰重写。
//抽象类
public abstract class Person
{
//抽象方法
public abstract void Dowork();
public abstract void Sleep();
}
//子类
public class Student : Person
{
//重载实现的抽象方法
public override void Dowork()
{
Console.WriteLine("电气工程师正在学习,提升自己的能力"); ;
}
public override void Sleep()
{
Console.WriteLine("电气工程师一般都在11点钟以后才睡觉");
}
}
2、虚方法
由virtual修饰的方法,可以是在抽象类中,在被子类继承时,子类可以选择是否重写这个虚方法,具有极大的灵活性,重写时与抽象方法一样需要override修饰。
//虚方法
public virtual string GetInfo()
{
return $"编号:{IdNo},姓名:{Name}";
}
public override string GetInfo()
{
return base.GetInfo()+" "+$"性别:{this.Gender}";
}
在继承中,如果父类中有多个构造方法,子类继承时不被显示的去继承父类的构造方法,可以通过在子类中重写构造方法,使用base关键字获取父类中的对象、构造方法。子类在继承后可以独立使用,添加自己特有的属性和行为,若被父类接收时,这些特征则会被屏蔽。
//构造方法
public Teacher()
{
}
public Teacher(string Name)
{
base.Name = Name;
}
public Teacher(string Name, string IdNo) : base(Name, IdNo)
{
}
public Teacher(string Name,int IdNo):this(Name)
{
}
public Teacher(string Name,string IdNo,string Gender):this(Name,IdNo)
{
this.Gender = Gender;
}