我摆弄Kotlin,并尝试创建一个简单的生物等级体系。我似乎已经能够成功完成此操作,但是,我无法在“人类:生物类”的子类的“头部:附属物”类中访问“ think”方法。
我可以看到子类一直打印到头类,但是我无法运行think()方法
val human = Human() println(human.appendages["Head"]) // [Head@3803641] println(human.appendages["Head"]?.get(0)) // Head@3803641 human.appendages["Head"]?.get(0).think() // uncaught reference
import org.omg.CORBA.Object import java.util.* open class Creature { var appendages = HashMap<String,ArrayList<Appendage>>() } open class Appendage { constructor() {} } open class Human : Creature { constructor() { appendages["Arm"] = ArrayList<Appendage>() appendages["Arm"]?.add(Arm()) appendages["Arm"]?.add(Arm()) appendages["Leg"] = ArrayList<Appendage>() appendages["Leg"]?.add(Leg()) appendages["Leg"]?.add(Leg()) appendages["Head"] = ArrayList<Appendage>() appendages["Head"]?.add(Head("Human")) } } class Alien : Creature { constructor() { appendages["Tentacle"] = ArrayList<Appendage>() appendages["Tentacle"]?.add(Tentacle()) appendages["Tentacle"]?.add(Tentacle()) appendages["Tentacle"]?.add(Tentacle()) appendages["Tentacle"]?.add(Tentacle()) appendages["Arm"] = ArrayList<Appendage>() appendages["Arm"]?.add(Arm()) appendages["Arm"]?.add(Arm()) appendages["Leg"] = ArrayList<Appendage>() appendages["Leg"]?.add(Leg()) appendages["Leg"]?.add(Leg()) appendages["Head"] = ArrayList<Appendage>() appendages["Head"]?.add(Head("Alien")) appendages["Head"]?.add(Head("Alien")) } } class Head : Appendage { private var whatami : String = "" constructor(whatami : String) { this.whatami = whatami } public fun think() { println("$whatami Thinking") } } open class Arm : Appendage { private var rotation = mutableListOf<Int>(0,0,0) constructor() {} fun rotateX(degrees: Int) { rotation[0] = degrees } fun rotateY(degrees: Int) { rotation[1] = degrees } fun rotateZ(degrees: Int) { rotation[2] = degrees } } open class Leg : Appendage { private var rotation = mutableListOf<Int>(0,0,0) constructor() {} fun rotateX(degrees: Int) { rotation[0] = degrees } fun rotateY(degrees: Int) { rotation[1] = degrees } fun rotateZ(degrees: Int) { rotation[2] = degrees } } open class Tentacle : Appendage { private var rotation = mutableListOf<Int>(0,0,0) constructor() {} fun rotateX(degrees: Int) { rotation[0] = degrees } fun rotateY(degrees: Int) { rotation[1] = degrees } fun rotateZ(degrees: Int) { rotation[2] = degrees } }
我希望程序打印“人类思维”,但出现“未引用的错误”
我摆弄Kotlin,并尝试创建一个简单的生物等级体系。我似乎已经能够成功完成此操作,但是,无法在我的“ Head:...
正如汤姆所说,您的编译器对类型一无所知。您需要像这样进行简单的转换: