In this assignment, for Question 1 and2:ArrayExample.java,ArrayExampleGood.java andArrayListExample.java. ·GeometricShape.java ·TwoDShape.java ·ThreeDShape.java ·Circle.java ·Cone.java ·Rectangle.java ·Sphere.java Test.javais a little test class that you can run to make sure the other classes are working. 1. Java Arrays and Type Compatibility Rules Look at the skeleton for the main method inArrayExample.java. Add some additional statements to it so that the code compiles correctly, and when it is run, it raises a java.lang.ArrayStoreException when adding a cone to geoshapes (Adding a circle should be OK). Here is the exception you should get: Assignment https://eclass.srv.ualberta.ca/mod/assign/view.php?id=3237749 1 of 6 2018-12-22, 9:21 p.m. Exception in thread "main" java.lang.ArrayStoreException: Cone at ArrayExample.main(ArrayExample.java:10) Next, look at the code inArrayExampleGood.java(This is exactly the same except for the class name). Add statements to this code as needed, so that the code compiles correctly, and runs without error. If you want, you can add some other statements to these main methods to get them printing something, but you don't need to. 2. Java Generics Look at the skeleton code inArrayListExample.java. Add additional methods total_area , total_perimeter and add_empties . Leave the main method untouched. You should get this output when you run the code: Example with a list of shapes with a circle, a cone, and some empty shapes Circle[radius=1.0] Cone[radius=2.0, height=3.0] Circle[radius=0.0] Cone[radius=0.0, height=0.0] Rectangle[width=0.0, height=0.0] Sphere[radius=0.0] Total number of shapes: 6 Example with a list of rectangles Rectangle[width=2.0, height=3.0] Rectangle[width=5.0, height=5.0] Total number of shapes: 2 total area of rectangles: 31.0 total perimeter of rectangles: 30.0 Example with a list of 2d shapes with a circle and a rectangle Rectangle[width=10.0, height=10.0] Circle[radius=2.0] Total number of shapes: 2 total area of flat shapes: 112.56637061435917 Example list of spheres Assignment https://eclass.srv.ualberta.ca/mod/assign/view.php?id=3237749 2 of 6 2018-12-22, 9:21 p.m. Sphere[radius=10.0] Sphere[radius=50.0] Sphere[radius=0.0] Total number of shapes: 3 3. Difficult Question Turn in a separate copy of all your files in a new directory (You'll need to touch many, perhaps all, of the files for the difficult question, not justArrayListExample.java). Add a supersize method to each of your geometric shape interfaces and classes that returns a new geometric shape, of the same type as the receiver, that is twice as large in each dimension as the receiver. For example, super sizing a cone with radius 10 and height 4 should return a new cone with radius 20 and height 8. The obvious declaration for supersize in GeometricShape would be: public GeometricShape supersize(); However, we want the type of supersize for Cone to say that it returns a Cone , but not a GeometricShape . An immediate solution is to generalize the method: public interface GeometricShape { public T supersize(); } Then the supersize method in Cone can be written as: public Cone supersize() { return new Cone(2.0 * radius, 2.0 * height); } However, it is not good, because we can even return a non- GeometricShape , which is not correct at all! So a better way is to add a type parameter: public interface GeometricShape { public voiddescribe(); public T supersize(); } In this condition, supersize can only return geometric shapes. But this is not comprehensive, either. For example, it is possible that a Rectangle.supersize returns a circle. Make the appropriate modifications to all the geometric shape classes and add a method supersize_list Assignment https://eclass.srv.ualberta.ca/mod/assign/view.php?id=3237749 3 of 6 2018-12-22, 9:21 p.m. so that it takes an array list of some kind of geometric shapes (for example, rectangles) and returns an array list of the same type, with the shapes super sized. The skeleton code inArrayListExample.javaincludes some commented-out lines at the end that use the supersize_list method. Uncomment them (but don't otherwise change them). You should get the following additional output: super-sizing a list of rectangles Rectangle[width=4.0, height=6.0] Rectangle[width=10.0, height=10.0] Total number of shapes: 2 super-sizing a list of spheres Sphere[radius=20.0] Sphere[radius=100.0] Sphere[radius=0.0] Total number of shapes: 3 Hint: starts with generalizing the GeometricShape : public interface GeometricShape { public voiddescribe(); public T supersize();