里氏替换原则的实现方式:子类可以出现在任何需要父类出现的地方
动态多态性:
1.虚方法的动态多态性
2.抽象方向的动态多态性
3.接口方法的动态多态性
动态多态性的作用:
1.实现"功能定义"与"功能实现"相脱离,实现代码进一步灵活性
2.实现"系统设计"与"系统代码"相脱离,实现代码稳定性,减少系统BUG
using System;
namespace 动态多态性
{
? ? ? class Person
? ? ? ?{
? ? ? ? ? ? ? public virtual void Speak(){
? ? ? ? ? ? ? ? ? ? ? ?Console.WriteLine("父类说");
? ? ? ? ? ? ? ?}
? ? ? ? ?}
? ? ? ? class Zhang:Person
? ? ? ? {
? ? ? ? ? ? ? ?public override void Speak ()
? ? ? ? ? ? ? ?{
? ? ? ? ? ? ? ? ? ? ?Console.WriteLine("张说");
? ? ? ? ? ? ? ?}
? ? ? ? ? }
? ? ? ? ? interface IPerson
? ? ? ? ? {
? ? ? ? ? ? ? ? ?void Speak();
? ? ? ? ? ?}
? ? ? ? ? ?interface IPersonTwo
? ? ? ? ? ?{
? ? ? ? ? ? ? ? void Speak();
? ? ? ? ? ?}
? ? ? ? ? class Chinese:IPerson,IPersonTwo
? ? ? ? ? {
? ? ? ? ? ? ? ? void IPerson.Speak(){
? ? ? ? ? ? ? ? ? ? Console.WriteLine ("中国人说中国话");
? ? ? ? ? ? ? ? ?}
? ? ? ? ? ? ? ? ?void IPersonTwo.Speak(){
? ? ? ? ? ? ? ? ? ? ?Console.WriteLine ("中国人还会说英语");
? ? ? ? ? ? ? ? ?}
? ? ? ? ? ?}
? ? ? ? ? class MainClass
? ? ? ? ?{
? ? ? ? ? ? ? public static void Main (string[] args)
? ? ? ? ? ? ?{
? ? ? ? ? ? ? ? ? ? //虚方法的动态多态性
? ? ? ? ? ? ? ? ? ? // Person p = new Zhang();
? ? ? ? ? ? ? ? ? ? ?// p.Speak();
? ? ? ? ? ? ? ? ? ? ?//动态多态性之接口
? ? ? ? ? ? ? ? ? ? ?IPerson ip = new Chinese();
? ? ? ? ? ? ? ? ? ? ?ip.Speak ();
? ? ? ? ? ? ? ? ? ? ?IPersonTwo ip2 = new Chinese ();
? ? ? ? ? ? ? ? ? ? ?ip2.Speak ();
? ? ? ? ? ? ? }
? ? ? ? ? ?}
}