Если MyMusicFile
расширяет File
, то MyMusicFile
также является File
, но это не делает File
a MyMusicFile
. Если вы перечислите все суперклассы для каждого класса, вы получите:
- Файл: java.lang.Object
- MyMusicFile: java.io.File, java.lang.Object
И вы можете назначить любой тип его типу или любому другому супертипу (скажем, Object
до File
или File до MyMusicFile
).
Вы можете думать об этом так: MyMusicFile
имеет все поля и методы, такие как File
, плюс некоторые дополнительные. Таким образом, можно безопасно назначить экземпляр MyMusicFile
для File
, потому что он будет работать (имеет все необходимое), но File
не имеет всего, что имеет MyMusicFile
(этого лишнего нет ), так что это не сработает.