继承:当继承现有类型时,也就创造了新的类型。这个类型不仅包括了现有类型的所有成员(尽管private成员被隐藏了起来,并且不可访问),而且更重要的是它复制了基类的方法。也就是说,所有可以发送给基类对象的消息同时也可以发送给导出类对象。
导出类的对象不仅与基类拥有相同的类型,而且还拥有相同的行为,这样做没有什么特别意义。有两种方法可以使基类与导出类产生差异。
第一种方法:直接在导出类中添加新方法,这些新方法并不是基类接口的一部分。
第二种方法:覆盖:要想覆盖某个方法,可以直接在导出类中创建该类的新定义即可
is-a(是一个)关系继承中只覆盖基类的方法,而不添加基类中没有的新方法,导出类和基类是完全相同的类型,并且具有完全相同的接口,判断是否继承,就是要确定是否可以用is-a来描述类之间的关系,并使之具有实际意义。
is-like-a(像是一个)关系在导出类型中添加新的接口元素。