就象很多参数用接口和抽象类一样。

解决方案 »

  1.   

    因为正方形与长方形,在数学上来看,正方形是长方形的一个特例,从这方面来看 用长方形做基类是很自然的选择;但是在面向对象的角度来看,这种父子级关系是很不可靠的,原因来自:长方形的两边可以不等,而正方形要求两边必须相等。这就导则对长方形的逻辑规则,不一定适应正方形! 具体的Robert Martin在《敏捷软件开发》上讲的更深刻,可看看!
      

  2.   

    到底原则>约定,还是约定>原则,纠结啊。。
      

  3.   

    维基百科上的 Liskov substitution principle
    http://en.wikipedia.org/wiki/Liskov_substitution_principle里氏替换原则的幻灯片:http://www.engr.mun.ca/~theo/Courses/ssd/pub/sd-principles-3.pdf
      

  4.   

    里氏代换原则是由"Barbara Liskov"提出的。如果调用的是父类的话,那么换成子类也完全可以运行。比如:
      光盘 d=new 盗版盘();
      d.卖();
        现在要将"盗版盘"类改为"毛片"类,没问题,完全可以运行。Java编译程序会检查程序是否符合里氏代换原则。还记得java继承的一个原则吗?子类overload方法的访问权限不能小于父类对应方法的访问权限。比如"光盘"中的方法"卖"访问权限是"public",那么"盗版盘"和"毛片"中的"卖"方法就不能是package或private,编译不能通过。为什么要这样呢?你想啊:如果"盗版盘"的"卖"方法是private。那么下面这段代码就不能执行了:
        光盘 d=new 盗版盘();
        d.卖();