Casting does not change the class type of the object. So, even though the InterruptedException object was implicitedly casted to an Exception reference, and then implicitedly casted to a Throwable reference. The reference t is still referring to a InterrruptedException object, which is then rethrown.
I think catch statements don't act like method calls... like the program doesn't look at each catch statement and decide which one it fits into best. It looks at the first catch statement and sees if the exception will fit and in this case it does. The thrown exception would be caught by (Throwable t) if it hadn't already been caught. This is just my badly worded understanding as I am trying to learn this stuff same as you, so anyone please correct me.