/**
* 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{
protected int i = 10;
protected int j = 20;
//Shared method not to be overridden
public final void f(){
System.out.println("Superclass:test");
}
//Method intended to be overridden but
//including a default implementation.
public void common(){
System.out.println("Superclass:common");
}
}
class Subclass extends Superclass{
public void test(){
//Can call superclass method
f();
//Can use superclass instance variables
i = 20;
}
}
class Subclass2 extends Superclass{
public void common(){
System.out.println("Subrclass2:test");
}
}
class l1Inherit7{//Abstract1
public static void main(String[] args){
//Can't create Superclass objects
//Superclass superclass = new Superclass();
Subclass subclass = new Subclass();
subclass.test();
//Can do this assignment and call method in
//shared public interface
Superclass superclass = subclass;
superclass.common();
//Can also create Subclass2 object and call common
superclass = new Subclass2();
superclass.common();
//Method f is also part of shared interface
subclass.f();
superclass.f();
}
}
/******** sample compilation & run *******
# javac l1Inherit7.java
# java l1Inherit7
Superclass:test
Superclass:common
Subrclass2:test
Superclass:test
Superclass:test
#
******************************************/