

// file:    StackFromVector.java
// author:  keller
// purpose: making a Stack from a Vector using inheritance

import java.io.*;
import java.util.Vector;

class StackFromVector extends Vector
{
int number = 0;		// number of elements in Stack

// constructor

StackFromVector()
  {
  }


// Note: methods size(), addElement(Object), elementAt(int), and 
// setElementAt(Object, int) are inherited from the base class Vector

// isEmpty() can not be redefined for Stack, since it is a final method of 
// Vector.  Therefore we define isEmptyStack() instead.   However, one should
// be careful not to use isEmpty() to test whether the Stack is empty; it
// tests whether the underlying Vector is, which is a different issue.

// push an item

void push(Object ob)
  {
  if( number >= size() )
    addElement(ob);
  else
    setElementAt(ob, number);
  number++;
  }


// pop an item

Object pop()
  {
  return elementAt(--number);
  }


// test if empty

boolean isEmptyStack()
  {
  return number == 0;
  }

public static void main(String arg[])
  {
  int size = 100;
  StackFromVector S = new StackFromVector();

  for( int i = 0; i < size; i++ )
    {
    S.push(new Integer(i*i));
    }

  while( !S.isEmptyStack() )
    {
    System.out.print(S.pop() + " ");
    }
  System.out.println();
  }

}

