package org.eidecker.oca8lernen.general; import static org.junit.jupiter.api.Assertions.assertThrows; import org.junit.jupiter.api.Test; import java.io.IOException; import java.nio.file.AccessDeniedException; import java.util.List; import java.util.zip.DataFormatException; /** * @author seidecke. */ public class CastExceptions { @Test public void testCastExceptions() { OberCast eigentlichUnter = new UnterCast(); OberCast wirklichOber = new OberCast(); UnterCast purUnter = new UnterCast(); Außerhalb außerhalb = new Außerhalb(); OberCast ober = purUnter; UnterCast unter = (UnterCast) eigentlichUnter; // Runtime-Exception, da innerhalb der Typenhierarchie assertThrows(ClassCastException.class, () -> { UnterCast unter3 = (UnterCast) wirklichOber; }); // Compilefehler, da Versuch des Casts außerhalb der Typenhierarchie // UnterCast unter2 = (UnterCast) außerhalb; try { UnterCast unterCast = new UnterCast(); unter.method(); } catch (RuntimeException e) { } } } class OberCast { public void method() throws IOException{ } } class UnterCast extends OberCast { @Override public void method() { System.out.println("method in Untercast"); } } class Außerhalb { } class MyCheckedException extends Exception { }