在Haskell中,我可以定义以下数据类型:
data Tree = Empty
| Leaf Int
| Node Tree Tree
Run Code Online (Sandbox Code Playgroud)
然后写这样的多态函数:
depth :: Tree -> Int
depth Empty = 0
depth (Leaf n) = 1
depth (Node l r) = 1 + max (depth l) (depth r)
Run Code Online (Sandbox Code Playgroud)
在Java中,我可以使用接口模拟代数数据类型:
interface Tree {}
class Empty implements Tree {}
class Leaf implements Tree { int n; }
class Node implements Tree { Tree l; Tree r; }
Run Code Online (Sandbox Code Playgroud)
但是,如果我尝试使用类似Haskell的多态,我会收到一个错误:
int depth(Empty node) {
return 0;
}
int depth(Leaf …Run Code Online (Sandbox Code Playgroud)