Exploring what compile time and runtime checks happen
-
Compiles a Thing from Thing.java
-
Deletes the class
-
Compiles a Thing from Thing2.java (compiler doesn't whinge because this class isn't public so can be in wrongly named file)
-
Runs Main with Thing (from Thing2)
-
Crashes only when invoking Callable.call().
-
Does not crash because thing is not Callable when passed into doThingCall(thing) which is expected a Callable.