next up previous contents
Next: Inheritance 9: Final Up: Java Notes Previous: Inheritance 8: Abstract Method

Inheritance 8: Abstract Method


/**
 *  This code is from the book:
 *  Winder, R and Roberts, G (1998)
 *  Developing Java Software</em>
 *  John Wiley & Sons.
 *  It is copyright (c) 1997 Russel Winder
 *  and Graham Roberts.
 */

abstract class Superclass{
  //Non-abstract classes must override and
  //implement this method.
  public abstract void f();

  //Standard method - can be shared or overriden
  public void h(){
    System.out.println("Superclass:h");
  }

  //Can't declare static methods as abstract
  //public abstract static void x(); //Error
}

class Subclass extends Superclass{
  //Overridden inherited abstract method
  //This class can have instances
  public void f(){
    System.out.println("Subclass");
  }
}

//This class does not override the inherited 
//abstract method f and so must be abstract
abstract class Subclass2 extends Superclass{
  //Declare a new abstract method
  public abstract void g();
}

//This class implements both inherited abstract
//methods and can have instance objects
class Subclass3 extends Subclass2{
  //Must override inherited abstract method f here
  public void f(){
    System.out.println("Subclass2:f");
  }

  //Must also override inherited 
  //abstract method g here
  public void g(){
    System.out.println("Subclass2:g");
  }

  //Overridden inherited method
  //Allowed but not necessary
  public void h(){
    System.out.println("Superclass:h");
  }
}

class l1Inherit8{//Abstract2
  public static void main(String[] args){
    //Can't create Superclass objects
    //Superclass superclass = new Superclass(); 
                              //Error abstract

    //Can't create Subclass2 objects
    //Subclass subclass2 = new Subclass2(); 
                              //Error abstract

    Subclass subclass = new Subclass();
    subclass.f();
    subclass.h();

    Subclass3 subclass3 = new Subclass3();
    subclass3.f();
    subclass3.g();
    subclass3.h();
  }
}
/******** sample compilation & run *******
# javac l1Inherit8.java 
# java l1Inherit8
Subclass
Superclass:h
Subclass2:f
Subclass2:g
Superclass:h
# 
******************************************/



Ananda Amatya
9/15/1999