// Practice3.java
// contains classes P, Q, R, and Practice3
//
// Preparation for output problems on a quiz
// or exam, involving inheritance.
//
// Before you run this program, write down on paper
// what you think the complete output will be.
// Then run the program to see if you were right.
class P {
private static int objectCount = 0;
private int objectNumber;
public P()
{
objectCount++;
objectNumber = objectCount;
System.out.println("*** constructor P(): object#="
+ objectNumber + ", class="
+ getClass().getName());
} // constructor P()
public String toString()
{
return (getClass().getName() + ":object#" + objectNumber);
} // method toString()
} // class P
class Q extends P {
private int n;
public Q()
{
n = 0;
System.out.println("--- constructor Q(): n=" + n);
} // constructor Q()
public Q(int i)
{
n = i;
System.out.println("--- constructor Q(int): i="
+ i + " n=" + n);
} // constructor Q(int)
public void q()
{
n++;
System.out.println("--- Q: q(): n=" + n);
} // method q()
public String toString()
{
return (super.toString() + ",n=" + n);
} // method toString()
} // class Q
class R extends Q {
private int m;
public R()
{
m = 0;
System.out.println("--- constructor R(): m=" + m);
} // constructor R()
public R(int i)
{
super(i);
m = i * 10;
System.out.println("--- constructor R(int): i="
+ i + " m=" + m);
} // constructor R(int)
public void r()
{
m += 10;
System.out.println("--- R: r(): m=" + m);
} // method r()
public String toString()
{
return (super.toString() + ",m=" + m);
} // method toString()
} // class R
class S extends R {
public S()
{
super(0);
System.out.println("--- constructor S()");
} // constructor S()
public void q()
{
System.out.println("--- S: q()");
} // method q()
} // class S
class T extends R {
public T()
{
super(10000);
System.out.println("--- constructor T()");
} // constructor T()
public void r()
{
System.out.println("--- T: r()");
} // method r()
} // class S
public class Practice3 {
public static void main(String[] args)
{
P[] array = { new P(), new Q(100), new Q(),
new R(100), new R(),
new S(), new T() };
for ( int i=0; i<7; i++ )
{
System.out.println("Begin testing array[" + i + "]: "
+ array[i].toString());
if ( array[i] instanceof Q )
((Q) array[i]).q();
if ( array[i] instanceof R )
((R) array[i]).r();
System.out.println("End testing array[" + i + "]: "
+ array[i]); // automatic call to
// array[i].toString()
} // for i
} // method main
} // class Practice3