/* CSC 17 "Class" Exercise https://cs.hofstra.edu/~cscccl/csc17/stu1.java Advanced object oriented programming requires three key components: 1. Dynamic type information 2. Dynamic memory allocation 3. Dynamic dispatch Advanced OOP requires a separation between the "abstract" view of objects from their "concrete" view. The abstract view is usually a general superclass, an abstract superclass, or an interface. Referring to the classic "shapes" example, the abstract view of objects is that they're "shapes" and the concrete view is that they're circles, rectangles, squares, etc. For example, we may wish to place different shapes into a data structure: shape[] S = new shape[3]; // array of abstract shapes S[0] = new circle(radius); S[1] = new rectangle(width,height); if (..) S[2] = new circle(..) else S[2] = new rectangle(..,..); double totalarea = 0; for(int i=0;i