/**
* l1PolyTest.java:
* Polymorphism & dynamic binding Example
* Overridden area(double) defintions for Circle & Square
**/
abstract class Shape{
protected final static double PI = 22.0/7.0;
protected double length;
public abstract double area();
}
class Square extends Shape{
Square(double side){
length=side;// initialises inherited length
}
public double area(){// overrides area() of Shape
return length*length;// length inherited from Shape
}
}
class Circle extends Shape{
Circle(double radius){
length=radius;// initialises inherited length
}
public double area(){// overrides area() of Shape
return PI*length*length;// PI & length inherited from Shape
}
}
/**
* Polymorphism & Dynamic binding test class
**/
public class l1PolyTest{
public static void main(String[] args){
Shape sh;// no object instance just variable declaration
Square sq = new Square(10.0);// sq is a Square object reference
Circle circ = new Circle(10.0);// circ is a Circle object reference
sh=sq;// sh dynamically bound to the Square object referenced by sq
System.out.println("Area of Square = " + sh.area());
sh=circ; // sh dynamically bound to the Circle object referenced by circ
System.out.println("Area of circle = " + sh.area());
}
}
/*********** Compile & Run **************
# javac l1PolyTest.java
# java l1PolyTest
Area of Square = 100.0
Area of circle = 314.2857142857143
#
****************************************/