//为方法（没有方法体）和属性（没有getter/setter）自动添加abstract修饰符
//不能创建实例，但可以声明变量
interface MyInterface {
     fun bar()    // 未实现
     fun foo() {  //已实现
        // 可选的方法体
        println("foo")
    }

    object O1{
        fun a() = println("A")
    }
    companion object O2{
        fun b() = println("B")
    }

    class  C1{
        fun c() = println("C")
    }
    interface m {
        fun ma()=println("MA")

    }
}

class Child : MyInterface {
    override fun bar() {
        println("bar")
    }
}

class Child2 : MyInterface.m {
    override fun ma() {
        println("bar")
    }
}


fun main() {
    val c =  Child()
    c.foo();
    c.bar();
    MyInterface.C1().c()
    MyInterface.O1.a()
    MyInterface.b()
}
