package abstract class MyClass() { //properties val a: Int val a1: Int = 1 abstract val a2: Int abstract val a3: Int = 1 var b: Int private set var b1: Int = 0; private set abstract var b2: Int private set abstract var b3: Int = 0; private set var c: Int set(v: Int) { field = v } var c1: Int = 0; set(v: Int) { field = v } abstract var c2: Int set(v: Int) { field = v } abstract var c3: Int = 0; set(v: Int) { field = v } val e: Int get() = a val e1: Int = 0; get() = a abstract val e2: Int get() = a abstract val e3: Int = 0; get() = a //methods fun f() fun g() {} abstract fun h() abstract fun j() {} } abstract class MyAbstractClass() { //properties val a: Int val a1: Int = 1 abstract val a2: Int abstract val a3: Int = 1 var b: Int private set var b1: Int = 0; private set abstract var b2: Int private set abstract var b3: Int = 0; private set var c: Int set(v: Int) { field = v } var c1: Int = 0; set(v: Int) { field = v } abstract var c2: Int set(v: Int) { field = v } abstract var c3: Int = 0; set(v: Int) { field = v } val e: Int get() = a val e1: Int = 0; get() = a abstract val e2: Int get() = a abstract val e3: Int = 0; get() = a //methods fun f() fun g() {} abstract fun h() abstract fun j() {} } interface MyTrait { //properties val a: Int val a1: Int = 1 abstract val a2: Int abstract val a3: Int = 1 var b: Int private set var b1: Int = 0; private set abstract var b2: Int private set abstract var b3: Int = 0; private set var c: Int set(v: Int) { field = v } var c1: Int = 0; set(v: Int) { field = v } abstract var c2: Int set(v: Int) { field = v } abstract var c3: Int = 0; set(v: Int) { field = v } val e: Int get() = a val e1: Int = 0; get() = a abstract val e2: Int get() = a abstract val e3: Int = 0; get() = a //methods fun f() fun g() {} abstract fun h() abstract fun j() {} } enum class MyEnum() { ; //properties val a: Int val a1: Int = 1 abstract val a2: Int abstract val a3: Int = 1 var b: Int private set var b1: Int = 0; private set abstract var b2: Int private set abstract var b3: Int = 0; private set var c: Int set(v: Int) { field = v } var c1: Int = 0; set(v: Int) { field = v } abstract var c2: Int set(v: Int) { field = v } abstract var c3: Int = 0; set(v: Int) { field = v } val e: Int get() = a val e1: Int = 0; get() = a abstract val e2: Int get() = a abstract val e3: Int = 0; get() = a //methods fun f() fun g() {} abstract fun h() abstract fun j() {} } abstract enum class MyAbstractEnum() {} //properties val a: Int val a1: Int = 1 abstract val a2: Int abstract val a3: Int = 1 var b: Int private set var b1: Int = 0; private set abstract var b2: Int private set abstract var b3: Int = 0; private set var c: Int set(v: Int) { field = v } var c1: Int = 0; set(v: Int) { field = v } abstract var c2: Int set(v: Int) { field = v } abstract var c3: Int = 0; set(v: Int) { field = v } val e: Int get() = a val e1: Int = 0; get() = a abstract val e2: Int get() = a abstract val e3: Int = 0; get() = a //methods fun f() fun g() {} abstract fun h() abstract fun j() {} //creating an instance abstract class B1( val i: Int, val s: String ) { } class B2() : B1(1, "r") {} abstract class B3(i: Int) { } fun foo(a: B3) { val a = B3(1) val b = B1(2, "s") }