литье (AS) в Kotlin, не работает на объектах - PullRequest
0 голосов
/ 03 апреля 2020
open class Operations1(){
    open fun sum1(n1:Int,n2:Int):Int{
        return n1+n2
    }

    fun div(n1:Int,n2:Int):Int{
        return n1/n2
    }
}


class Operations2:Operations1{
    constructor():super(){

    }

    override fun sum1(n1:Int,n2:Int):Int{
        return n1*n2
    }

    fun mul(n1:Int,n2:Int):Int{
        return n1*n2
    }

    fun sub(n1:Int,n2:Int):Int{
        return n1-n2
    }
}

fun main(){

    var op2 = Operations2()
    println("Operation 2: "+op2.sum1(9,9)) // output 81
    var op1 = Operations1()

    println("Operation 1: "+op1.sum1(9,9)) //output 18

    //  THIS SHOULD HAVE DONE CASTING
    // AND SHOULD HAVE CALLED SUM1 FUNCTION OF OPERATIONS1
    // BUT IT IS NOT WORKING
    var opas = Operations2() as Operations1

    println("opas :"+opas.sum1(9,9))        //What should be the output ? 18 or 81

}

1 Ответ

0 голосов
/ 03 апреля 2020

Вывод будет 81, он работает просто отлично.

Upd: приведение, инструктирует компилятор изменить существующий тип объекта REFERENCE на другой тип. Это может дать нам некоторые другие функциональные возможности, но все методы по-прежнему будут работать с классом создаваемого объекта.

Upd: Возможно, вам придется прочитать о динамическом c полиморфизме

...