Java не знает тип объекта во время компиляции, но знает тип переменной.
В случае
SimplePointMarker pm = new OceanQuakeMarker(feature);
EarthquakeMarker em = pm;
Java делает только знать, что pm
является SimplePointMarker
, но реальный тип (OceanQuakeMarker
) неизвестен во время компиляции.
Теоретически, объект может быть изменен в любое время, и он не будет EarthquakeMarker
больше.
Поскольку реальный тип неизвестен во время компиляции, он будет выглядеть как
SimplePointMarker pm;//=something
EarthquakeMarker em = pm;
Поэтому вам придется разыграть его, потому что SimplePointMarker
не является всегда EarthquakeMarker
.
Поскольку реальный тип известен только во время выполнения, тип также будет проверен во время выполнения.
Если вы приведете объект к типу, объект не является экземпляр, ClassCastException
будет брошен.