//Use dynamic method dispath
class TwoDShape{
private double width;
private double height;
private String name;
//A default constructor
TwoDShape(){
width = height = 0.0;
name = "none";
}
//Parameterized constructor
TwoDShape(double w, double h, String n){
width = w;
height = h;
name = n;
}
//Constructor boject with equal width and height
TwoDShape(double x, String n){
width = height = x;
name = n;
}
//Construct an object from an object
TwoDShape(TwoDShape ob){
width = ob.width;
height = ob.height;
name = ob.name;
}
//Accessor methods for width and height
double getWidth(){return width;}
double getHeight(){return height;}
void setWidth(double w){width = w;}
void setHeight(double h){height = h;}
String getName(){return name;}
void showDim(){
System.out.println("Width and height are " + width + " and " + height);
}
double area(){
System.out.println("area() must be overridden");
return 0.0;
}
}
//A subclass of TwoDShape for triangles.
class Triangle extends TwoDShape{
private String style;
//A default constructor
Triangle(){
super();
style = "none";
}
//constructor for Triangle
Triangle(String s, double w, double h){
super(w, h, "triangle");
style = s;
}
//One argument constructor
Triangle(double x){
super(x, "triangle"); //call superclass constructor
style = "filled";
}
//constructor an object from an object
Triangle(Triangle ob){
super(ob);//pass object to TwoDShape constructor
style = ob.style;
}
//override area() for Triangle
double area(){
return getWidth() * getHeight() / 2;
}
void showStyle(){
System.out.println("Triangle is " + style);
}
}
//A subclass of TwoDShape for rectangles.
class Rectangle extends TwoDShape{
//A default constructor
Rectangle(){
super();
}
//constructor for Rectangle
Rectangle(double w, double h){
super(w, h, "rectangle");
}
//constructor a square.
Rectangle(double x){
super(x, "rectangle");
}
//Consturct an object from an object
Rectangle(Rectangle ob){
super(ob);
}
boolean isSquare(){
if(getWidth()==getHeight()) return true;
return false;
}
//Override area() for Rectangle
double area(){
return getWidth() * getHeight();
}
}
class DynShapes{
public static void main(String args[]){
TwoDShape shapes[] = new TwoDShape[5];
shapes[0] = new Triangle("outlined", 8.0, 12.0);
shapes[1] = new Rectangle(10);
shapes[2] = new Rectangle(10, 4);
shapes[3] = new Triangle(7.0);
shapes[4] = new TwoDShape(10, 20, "generic");
for(int i = 0; i < shapes.length; i++){
System.out.println("object is " + shapes[i].getName());
System.out.println("Area is " + shapes[i].area());
System.out.println();
}
}
}