/** * 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 {
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
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 实例。