If a class member is private, that means child class instances are unable to access that member. Smart-casting causes Kotlin to treat the variable as a subtype. If you want this behavior, consider making the class member in question protected rather than private or just keep performing the supertype cast.