Question:
If I have:abstract class A; class B extends A; class C extends A;and I want to make an array of class A objects in order to access methods ofboth B and C, what do I do? Here’s what I’ve tried:
A MyA[]; MyA[0]=new B(); MyA[1]=new C();This gives me a null pointer error (of course)
A MyA[5];This doesn’t work because you cannot make instances of abstract baseclasses. WHAT DO I DO?
Answer:
The last statement will work just fine:A[] aa = new A[5];This makes an array aa of 5 references to objects of type A (or really, ofobjects of some class that is derived from A). Initially, the references areall null.
+--------+ +--------+ aa | ----+----->| null | +--------+ +--------+ | null | +--------+ | null | +--------+ | null | +--------+ | null | +--------+Now you can fill that array with objects of any non-abstract type derivedfrom A.
aa[0] = new B(); aa[1] = new C(); +--------+ +--------+ +--------+ | B | aa | ----+----->| ----+----->+--------+ +--------+ +--------+ | ----+----->+--------+ +--------+ | C | | null | +--------+ +--------+ | null | +--------+ | null | +--------+Here is a complete program.
public class AbstractTest{ public static void main(String[] args) { A[] aa = new A[5]; for (int i = 0; i < aa.length; i++) if (i % 2 == 0) aa[i] = new B(); else aa[i] = new C(); for (int j = 0; j < aa.length; j++) aa[j].print(); }}abstract class A{ abstract public void print();}class B extends A{ public void print() { System.out.println("B"); }}class C extends A{ public void print() { System.out.println("C"); }}