Unless I am missing something (and I was based on my next reply), in your example can’t you just use interface for Parent:
interface Parent {
val type: String
val commonProperty1: Any
val commonProperty2: Any
/* and so on with all common properties */
}
or if it really needs to be an abstract class just make the properties abstract in the parent:
abstract class Parent {
abstract val type: String
abstract val commonProperty1: Any
abstract val commonProperty2: Any
/* and so on with all common properties */
}