前文链接:https://blog.csdn.net/qq_39157152/article/details/113347386
三、里氏替换原则
里氏替换原则(Liskov Substitution Principle,简称LSP): 子类可以替换父类。父类变量接收子类对象,接口变量接收接口实现类的对象。
注意:当使用父类类型的时候,子类特有的行为和属性会被屏蔽。
应用场合示例:程序的启动入口、窗体的Controls集合等。
子类独立使用的示例:窗体、控件、自定义控件等
static void Main(string[] args)
{
Person student = new Student()
{
Name="张三",
IdNo="1001"
};
Person teacher = new Teacher("李文","1102","男");
Student mstudent = new MStudent()
{
Name = "李想",
IdNo = "1002"
};
Test(student);
Test(teacher);
Test(mstudent);
mstudent.SayHI();
Console.ReadKey();
}
/// <summary>
/// 多态实现的形式1:父类作为参数传递,通过里氏替换原则原则,实际传递的是不同的子类对象
/// </summary>
/// <param name="person"></param>
public static void Test(Person person)
{
string result=person.GetInfo();
Console.WriteLine(result);
person.Sleep();
person.Running();
person.Swimming();
person.Dowork();
Console.WriteLine("***************************************");
Console.WriteLine("***************************************");
}
四、多态
多态本质是根据OPP中的依赖倒置原则的面向抽象编程的特性。
抽象编程(可以使用父类就是用父类,能用接口就用接口)。
多态实现的两种方式
1、多态的实现1:把父类对象作为参数,实际窗体是子类对象,调用是会转到具体实现的子类中。
应用示例:程序的启动入口、窗体的Controls集合。
2、多态的实现2:把父类对象作为返回值,实际返回的是子类对象
应用示例:简单工厂、抽象工厂等设计模式中
/// <summary>
/// 多态实现的形式1:父类作为参数传递,通过里氏替换原则原则,实际传递的是不同的子类对象
/// </summary>
/// <param name="person"></param>
public static void Test(Person person)
{
string result=person.GetInfo();
Console.WriteLine(result);
person.Sleep();
person.Running();
person.Swimming();
person.Dowork();
Console.WriteLine("***************************************");
Console.WriteLine("***************************************");
}
/// <summary>
/// 多态实现的形式2:父类作为返回值,实际传递的是具体的子类对象
/// </summary>
/// <returns></returns>
public Person GetPerson()
{
return new Teacher();
}
接口多态3:接口类型作为参数,实际传递是具体实现的接口对象,调用时调用具体对象的接口行为,这个对象继承的其他特性或自有的特性会被屏蔽掉。
接口多态4:接口类型作为返回值类型,实际返回的是具体实现的接口对象,返回对象在被调用时,返回对象的继承的其他特性或自由有的特性会被屏蔽掉。
本文Demo链接:https://download.csdn.net/download/qq_39157152/14950548