【发布时间】:2014-06-23 00:36:04
【问题描述】:
我对@987654321@和subclass之间的关系有一些了解,但我不确定它们是否正确。
具体类(非泛型/高阶类)
如果我声明一些具体的类或类型,用 Java 或 Scala 说:
class B
class A extends B
如果A 类是B 类的子类,那么A 类型必须是B 类型的子类型?
另外,如果类型A 是类型B 的子类型,那么类A 是类B 的子类? (假设A 和B 都是类)
但只有当它是具体的类或类型时它们才是正确的
高阶类/类型
但是对于高阶类型,这不是真的,对吧?说:
class A[+T]
那么A[String] 类型是A[Object] 类型的子类型,但A[String] 不是A[Object] 的子类,对吧?
【问题讨论】:
-
Java 没有“类型”的概念,除了标量基元(不能子类型化)。
-
我们不能像谈论 Scala 那样谈论 Java 的泛型。他们做事不同。选择一个。
-
@HotLicks 不正确;在 Java 中,类和接口都是类型。
-
@chrylis - 在这种情况下,“类”和“类型”本质上是同义词(标量除外),所以这个问题毫无意义。
-
@HotLicks 即使在 Java 中,“类”和“类型”也是不同的概念。接口是类型而不是类。
ArrayList<Integer>是一个类型而不是一个类,即使ArrayList是一个类。
标签: java scala subclassing type-systems subtyping