如何理解里氏代换原则,我一向来认为有子类的地方,可以用父类代替。 就象很多参数用接口和抽象类一样。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 因为正方形与长方形,在数学上来看,正方形是长方形的一个特例,从这方面来看 用长方形做基类是很自然的选择;但是在面向对象的角度来看,这种父子级关系是很不可靠的,原因来自:长方形的两边可以不等,而正方形要求两边必须相等。这就导则对长方形的逻辑规则,不一定适应正方形! 具体的Robert Martin在《敏捷软件开发》上讲的更深刻,可看看! 到底原则>约定,还是约定>原则,纠结啊。。 维基百科上的 Liskov substitution principlehttp://en.wikipedia.org/wiki/Liskov_substitution_principle里氏替换原则的幻灯片:http://www.engr.mun.ca/~theo/Courses/ssd/pub/sd-principles-3.pdf 里氏代换原则是由"Barbara Liskov"提出的。如果调用的是父类的话,那么换成子类也完全可以运行。比如: 光盘 d=new 盗版盘(); d.卖(); 现在要将"盗版盘"类改为"毛片"类,没问题,完全可以运行。Java编译程序会检查程序是否符合里氏代换原则。还记得java继承的一个原则吗?子类overload方法的访问权限不能小于父类对应方法的访问权限。比如"光盘"中的方法"卖"访问权限是"public",那么"盗版盘"和"毛片"中的"卖"方法就不能是package或private,编译不能通过。为什么要这样呢?你想啊:如果"盗版盘"的"卖"方法是private。那么下面这段代码就不能执行了: 光盘 d=new 盗版盘(); d.卖(); JFrame和JDialog 如何判断一个数字 字符串里是否有某个数字 请问如何控制一个线程里面的发送网络请求? 关于容器与TOSTRING()函数的混合问题! 类构造器问题求教。 求一个计算两个timestamp的相差多少分钟 关于ArrayList的问题 各位java大虾,小弟初学给点建议(散分没的说) 国内站点哪有jdk1.4 for win 下载? Integer.toString(xx);//Integer.toString()做什么用?? dateformat数据插入不进数据库 byte[] 数组 转换为 short 类型
http://en.wikipedia.org/wiki/Liskov_substitution_principle里氏替换原则的幻灯片:http://www.engr.mun.ca/~theo/Courses/ssd/pub/sd-principles-3.pdf
光盘 d=new 盗版盘();
d.卖();
现在要将"盗版盘"类改为"毛片"类,没问题,完全可以运行。Java编译程序会检查程序是否符合里氏代换原则。还记得java继承的一个原则吗?子类overload方法的访问权限不能小于父类对应方法的访问权限。比如"光盘"中的方法"卖"访问权限是"public",那么"盗版盘"和"毛片"中的"卖"方法就不能是package或private,编译不能通过。为什么要这样呢?你想啊:如果"盗版盘"的"卖"方法是private。那么下面这段代码就不能执行了:
光盘 d=new 盗版盘();
d.卖();