演员不可能成功

我是Kotlin的新手,目前我正在研究面向对象的概念

我正在尝试使用此代码进行强制转换,但是我遇到了一个错误:

open class Operations1(){ open fun sum(n1:Int , n2:Int):Int{ return n1+ n2 } fun sub(n1:Int , n2:Int):Int{ return n1- n2 } } class multiOperations1():Operations(){ override fun sum(n1:Int , n2:Int):Int{ return n1+ n2 +5 } fun mul(n1:Int , n2:Int):Int{ return n1* n2 } fun div(n1:Int , n2:Int):Int{ return n1/ n2 } } fun main(args:Array<String>){ var oper = Operations() var inlit = multiOperations1() as Operations1 println("Enter first number") var n1:Int = readLine()!!.toInt() println("Enter Second Number") var n2:Int = readLine()!!.toInt() var sum = inlit.sum(n1 , n2) var sub = inlit.sub(n1 , n2) println("Sum: " + sum) println("Sub: " + sub) } 

代码的屏幕截图

这是代码的屏幕截图

错误:

这是我的程序通过的错误

您似乎同时拥有一个Operations和一个Operations1类。 您的multiOperations1类继承自Operations而不是Operations1 ,因此您将无法将其转换为Operations1 (除非OperationsOperations的子类)。

我假设你想从Operations1继承,而不是像这样:

 class multiOperations1(): Operations1() { ... } 

关于约定的一个注意事项:Kotlin中的类名通常遵循Java约定,并且使用上层的骆驼事件,所以你应该命名你的类MultiOperations1

要么你可以使用 –

  var inlit = multiOperations1() as Operations 

你可以把你的派生类转换成父类。 在你的情况multiOperations1类有一个父类Operations

只是一个建议从大写字母开始你像multiOperations1类名称。

Interesting Posts