1
RiceMarch 2021-06-04 01:49:43 +08:00 via iPhone
1 就是上转型,将父类的引用指向子类的实例 或者将子类对象赋值给父类引用
|
2
secondwtq 2021-06-04 05:04:06 +08:00
搜 Java array covariant
|
3
sutra 2021-06-04 08:28:22 +08:00
package java.lang;
/** * Thrown to indicate that an attempt has been made to store the * wrong type of object into an array of objects. For example, the * following code generates an {@code ArrayStoreException}: * <blockquote><pre> * Object x[] = new String[3]; * x[0] = new Integer(0); * </pre></blockquote> * * @since 1.0 */ public class ArrayStoreException extends RuntimeException { |
4
cpstar 2021-06-04 09:09:14 +08:00
a[0]和 a[1]都是 A 类型,实际指针指向的存储,一个 A 实例一个 B 实例。
调用的时候 a[0]/a[1]都无法调用 B 的扩展方法,如果 B 实现了 A 的 override 方法,则实现多态,调用 a[1]的时候,调用的是 B 的方法,a[0]则是 A 的方法。 然后可以 B b=(B)a[1],而如果 B b=(B)a[0]则抛 ClassCastException |
5
cpstar 2021-06-04 09:12:13 +08:00
A[] a,申明了 a 是 A 类型的数组
A[] a=new B[2],则是创建了两个 B 实例,并且将引用给 a[] 然后 a[0]=new A(),则又创建了一个 A 实例,并将引用给 a[0]。 所以此时 a[]保有这两个引用,一个指向 A 实例,一个指向 B 实例。 |
6
huang119412 2021-06-04 10:31:03 +08:00
Java 数组的缺陷。Java 数组是协变的. 这样设计是因为早期没有泛型的时候充当泛型。当然数组还有无任何 final,volatile 语义等缺陷。
|
7
sakura1 2021-06-04 10:57:35 +08:00
这是泛型里的协变和逆变的概念,就是
|
8
sakura1 2021-06-04 10:57:50 +08:00
A extends B
|
9
sakura1 2021-06-04 10:58:06 +08:00
...换行失败,打扰了
|
12
Not404 OP @huang119412 嗯 通过协变又去了解了其他几个概念。谢谢啦
|