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 internalFun() { super.internalFun() } override val internalProperty: Int = 0 protected override fun protectedFun() { super.protectedFun() } protected override val protectedProperty: Int = 0 public override fun publicFun() { super.publicFun() } public override val publicProperty: Int = 0 }