可以在没有多态性的情况下存在继承吗?还是它的迫在眉睫的副作用?这可能是一个谬误的问题,但这将帮助我理解两者之间的关系。
最佳答案
没有多态性就可以存在继承吗?
它们是相关的概念,但是是的,可以有一个没有另一个。在Java中,如果您将父类子类化,那么您也会得到一个子类型,但是在其他语言中,隐式情况可能并非如此。在某些语言中,继承可以只是代码重用的一种形式。
例如,在C ++中,如果不标记方法virtual
,就不会获得多态性。有关说明,请参见此处:Why do we need Virtual Functions in C++?。另一方面,在Java中,所有公共方法都是隐式virtual
。
这是一个广泛的主题,具有多种语言的多种风味。作为TL; DR(和总体简化),您可以认为继承是代码重用的一种形式,而多态性是用子类型的对象替换类型的对象的能力,并且程序可以继续正常工作。在Java中,这两件事是重叠的,您可以相互借鉴,但并非所有语言都是这样。
即使从继承中获得了多态性,仍然可以通过不遵守Liskov substitution principle来“打破多态性”。就像我说的...一个广泛的话题。
关于java - 多态性是遗传即将发生的副作用吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/37507580/