子类型在哪些方面与子类在使用上有所不同?
当类通过扩展或实现进行链接时,将建立子类型。子类型也用于泛型。
如何区分子类型和子类?
当类通过扩展或实现进行链接时,将建立子类型。子类型也用于泛型。
如何区分子类型和子类?
在Java中,子类化是一种子类型。
Java允许子类型化的方式有很多种:
class A extends B
A
B
B b = new A(...);
interface A extends B
A
B
B b = new A() { ... }
class A extends B
A[]
B[]
B[] b = new A[0]
class A implements B
A
B
B b = new A(...)
这听起来像是你想要一种方法来区分一个与其他人。下面应该这样做。
static boolean isSubclass(Class<?> a, Class<?> b) {
return !b.isArray() && !b.isInterface() && b.isAssignableFrom(a);
}
但是,由于类型擦除,它不会处理泛型类的子类型。 实例在运行时不携带类型参数,因此无法将 的运行时类型与 .Class
new ArrayList<String>()
new ArrayList<Integer>()
通常,子类化意味着继承父级的属性。子类型仅意味着可以对子类型执行超类型的操作。请注意,子类化是子类型的一种特殊情况。
在Java中,接口表示用于描述类型可以表现出的行为的结构,这使其成为子类型的自然表示。子类化在类层次结构中表现出来。