110,538
社区成员
发帖
与我相关
我的任务
分享
class A : B, IC, IContainer, IScraw
{
......
}
这类代码说成是 A 继承 C、Container、Scraw,这在设计上是完全可以理解的。就好像一杯子里倒了半杯水,你可以说他是半满的也可以说他是半空的,我们这里强调设计理解更好。public void 问候( Person a, Message msg)
{
......
}
那么他们一定希望自己的几十万行代码中,编译器能帮他判断调用这个“问候”的代码哪些是不合法的代码。那么Person可能有几百种,只要具有Person父类或者接口就可以。对于Message 也是一样。
因此有了面向类型编程的概念,才能谈多态,然后继承才跟领域知识对应起来。
继承是面向对象的概念。如果从c#之类的编程语言的术语来说,可以说“实现”接口。但是从设计上说,其实可以把接口跟普通的可继承类统一起来看,这样许多支持多重继承而并不支持接口的编程语言(例如Effiel语言就是一种比c#、smalltalk还要经典地面向对象的语言)就统一起来了。
所以不用抠“继承”这个字眼儿。一旦学过一些面向对象的软件工程,或者例如学过一点 UML 之类的,就熟悉了。IABC x = y;
这个代码的时候,编译器就会去检查变量 y 的定义是否兼容接口 IABC,这样当你使用了一个不兼容的类型的变量时,编译器会拒绝编译。
否则,如果等到运行时才在某种特定的变量值的时候才在用户面前丢人地崩溃,或这样程序带病执行,那就不好玩儿了。