zoukankan      html  css  js  c++  java
  • 里氏替换原则

    古人云呐,有疑问了就要谷哥,谷哥到的说的我晕晕乎乎,怎么根据小弟下面的问题去理解里氏替换原则呢?


        class Fax
    {
    public void FaxDoSome()
    {
    Console.WriteLine("Fax's public Method");
    }
    protected void SelfDo()
    {
    Console.WriteLine("Fax's protected Method");
    }
    }
    class LaserPrinter : Fax
    {
    public void LaserPrinterDoSome()
    {
    Console.WriteLine("LaserPrinter's public Method");
    }
    private static void Do()
    {
    Console.WriteLine("laserPrinter's private Method");
    }
    }
    class Program
    {
    private static T Min<T>(T o, T b)where T:class,IComparable<T>
    {
    if (o.CompareTo(b) < 0) return o;
    return b;
    }
    static void Main()
    {
    Fax f = new LaserPrinter();
    f.FaxDoSome();//只能调用Fax的一个方法
    Console.WriteLine(f.GetType());//LaserPrinter 既然是LaserPrinter,那为什么不能调用LaserPrinter的方法呢
    Console.WriteLine(f is Fax);//true
    Console.WriteLine(f is LaserPrinter);//true f到底是什么类型。。怎么都是true?
    Console.WriteLine(f is Object);//到这里我就有点明白为什么是true了。但是f.GetType()得到的为什么是LaserPrinter呢
    //里氏替换原则!该怎么理解?哪位大牛能指点指点,帮助大家共同进步!
    Console.ReadKey();
    }

    }
    根据这个例子怎么去理解里氏替换原则!?哪位大牛能指点指点,帮助大家共同进步!
    在代码里很大一部分逻辑功能,都是用父类的对象实现的。具体要体现哪一个子类的特性,只要在代码开始时将这个子类对象转换成父类对象即可。里氏替换原则保证了两个子类拥有相同的属性和方法,并且都可以替换成父类对象,以父类对象的身份在代码中执行,这样就使得大多数关于父类的逻辑代码可以最大范围地被复用。子类可以重写父类的方法,但是,每个子类都必须保证实现了父类在逻辑代码中的每一个用到的方法。
    通过里氏代换原则给我们带来了什么样的启示?
        类的继承原则:如果一个继承类的对象可能会在基类出现的地方出现运行错误,则该子类不应该从该基类继承,或者说,应该重新设计它们之间的关系。
        
    动作正确性保证:符合里氏代换原则的类扩展不会给已有的系统引入新的错误。
  • 相关阅读:
    Android 图片处理之 Fresco
    Android数据列表展示之 RecylerView
    新浪微博第二天
    Android之MVP设计模式
    android中fragment与activity之间通信原理以及例子
    SpannableString设置文本背景色
    新浪微博应用第一天
    python D11 迭代及闭包
    python D10 函数进阶
    python D9 初识函数
  • 原文地址:https://www.cnblogs.com/smailxiaobai/p/2287330.html
Copyright © 2011-2022 走看看