Making Class Array Access Methods of Other Classes

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"); }}
Share the Post:
Share on facebook
Share on twitter
Share on linkedin

Overview

Recent Articles: