Login | Register   
LinkedIn
Google+
Twitter
RSS Feed
Download our iPhone app
TODAY'S HEADLINES  |   ARTICLE ARCHIVE  |   FORUMS  |   TIP BANK
Browse DevX
Sign up for e-mail newsletters from DevX


Tip of the Day
Language: Java Language
Expertise: Beginner
Mar 19, 1997

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 of both 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 base classes. 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, of objects of some class that is derived from A). Initially, the references are all null.

        +--------+      +--------+
     aa |    ----+----->|  null  |
        +--------+      +--------+
                        |  null  |
                        +--------+
                        |  null  |
                        +--------+
                        |  null  |
                        +--------+
                        |  null  |
                        +--------+
        
Now you can fill that array with objects of any non-abstract type derived from 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"); }
}
DevX Pro
 
Comment and Contribute

 

 

 

 

 


(Maximum characters: 1200). You have 1200 characters left.

 

 

Sitemap
Thanks for your registration, follow us on our social networks to keep up-to-date