子类型在哪些方面与子类在使用上有所不同?

2022-09-02 01:03:40

当类通过扩展或实现进行链接时,将建立子类型。子类型也用于泛型。

如何区分子类型和子类?


答案 1

在Java中,子类化是一种子类型。

Java允许子类型化的方式有很多种:

  1. 当 ,是 因为 的子类型是可以的。class A extends BABB b = new A(...);
  2. 当 ,是 因为 的子类型是可以的。interface A extends BABB b = new A() { ... }
  3. 当 ,是 因为 的子类型是可以的。class A extends BA[]B[]B[] b = new A[0]
  4. 当 ,是 因为 的子类型是可以的。class A implements BABB b = new A(...)

这听起来像是你想要一种方法来区分一个与其他人。下面应该这样做。

static boolean isSubclass(Class<?> a, Class<?> b) {
  return !b.isArray() && !b.isInterface() && b.isAssignableFrom(a);
}

但是,由于类型擦除,它不会处理泛型类的子类型。 实例在运行时不携带类型参数,因此无法将 的运行时类型与 .Classnew ArrayList<String>()new ArrayList<Integer>()


答案 2

通常,子类化意味着继承父级的属性。子类型仅意味着可以对子类型执行超类型的操作。请注意,子类化是子类型的一种特殊情况。

在Java中,接口表示用于描述类型可以表现出的行为的结构,这使其成为子类型的自然表示。子类化在类层次结构中表现出来。


推荐