多态性涉及继承

Kel*_*lly 0 polymorphism

为什么多态性依赖于继承?代码示例?

Dar*_*rio 11

多态性本质上依赖于遗传.

多态性是一个相当抽象的概念,即为不同类型的提供统一的接口.

在常见的面向对象语言(如Java或C#)中,这些接口是通过类继承提供的,但这是多态的一种可能实现,而不是一般的多态的概念.

Duck类型,结构类型,C++样式模板或类型类都提供了多态的其他实现.

只需看到所有这些多态代码,以便为鸭子提供一个接口......

继承/接口(C#):

interface Duck { void quak(); }

void DoQuak(Duck d) { d.quak(); }
Run Code Online (Sandbox Code Playgroud)

动态鸭子打字(Python):

def DoQuak(d):
    d.quak();
Run Code Online (Sandbox Code Playgroud)

模板(Static duck-tying)(C++):

template <typename T>
void DoQuak(const T& d) { d.quak(); }
Run Code Online (Sandbox Code Playgroud)

结构类型(Scala):

def DoQuak(d : { def quak() : Unit }) { d.quak() }
Run Code Online (Sandbox Code Playgroud)

类型类(Haskell):

class Quakable a where
    quak :: a -> IO ()

doQuak d = quak d
Run Code Online (Sandbox Code Playgroud)