
abstract class Shape {
   int x = 0;
   int y = 0;
   void move(int dx, int dy) {
     x += dx;
     y += dy;
   }

   abstract void draw();
}

class Rectangle extends Shape {
   void draw() {
     System.out.println("Draw a rectangle");
   }
}

class Triangle extends Shape {
   void draw() {
     System.out.println("Draw a triangle");
   }
}

class Test {
  public static void main(String argv[]) {
    Shape s1 = new Rectangle();
    s1.draw();
    Shape s2 = new Triangle();
    s2.draw();
  }
}


// the same can be written as:
// interface Shape {
//    int x = 0;
//    int y = 0;
//    void move(int dx, int dx);
//    void draw();
// }

// class Rectangle implements Shape {
//     //implement methods in interface
// }
// and so on for other classes. 