110,568
社区成员
发帖
与我相关
我的任务
分享
abstract class Animal
{
//吃
public void Eat()
{
Console.WriteLine("{0}需要吃食物!", this.GetType().Name);
}
......
你肯定会得到“Cat需要吃食物”的答案,而不是“Aniamal需要吃食物”!
不是说一只Cat身体里另外住着一个Animal,而是“一个Cat同时也就是一个Animal”。而OOP实现了这个功能。因此你调用 animal.Eat() 其实就是针对 Animal 的子类对象实例进行的 Eat 操作。因为子类对象继承了 Eat 操作。
2. 里氏替换原则是一个实践性原则,不是一个标题党。
它是说,当你设计程序的时候,如果你的程序让一个类型B继承自类型A,那么你就应该尽量让所有B类实例都能通过针对A类对象实例所写的测试。
这是一个实践性原则,是用来鉴别你有没有“滥用继承”的。这需要比较多的、令人信服的测试用例。而且不是用手工测试方式,而是用可执行的代码方式来进行自动化测试。
不是说你随便写一个继承子类对象的赋值语句,就说成是里氏替换原则的表现。