open class A() { protected open fun protectedFun() { } internal open fun internalFun() {} public open fun publicFun() {} } trait B { protected open val protectedProperty : Int internal open val internalProperty : Int public open val publicProperty : Int } class C : A(), B { override fun equals(other: Any?): Boolean { return super.equals(other) } override fun hashCode(): Int { return super.hashCode() } override fun internalFun() { super.internalFun() } override val internalProperty: Int = 0 override fun protectedFun() { super.protectedFun() } override val protectedProperty: Int = 0 override fun publicFun() { super.publicFun() } override val publicProperty: Int = 0 override fun toString(): String { return super.toString() } }