Вызов функции дочернего класса из массива родительского абстрактного класса в Java / Kotlin - PullRequest
0 голосов
/ 01 ноября 2018

У меня есть этот массив GameObjects. Я перебираю арралист, и если тип объекта - дверь (один из дочерних классов GameObject), и если некоторые другие условия совпадают, я хочу вызвать функцию из класса двери, которая есть только в этом классе. Это возможно? Я использую Kotlin, но если вы знаете только Java, я мог бы ее портировать.

Ответы [ 3 ]

0 голосов
/ 01 ноября 2018

В Java вы можете код, как показано ниже:

for (GameObject gameObject: GameObjects) {
    if(gameObject instanceof Door ) { // you can add your another condition in this if itself
        // your implementation for the door object will come here
    }
}
0 голосов
/ 01 ноября 2018

Вы можете использовать так:

//Kotlin 1.1
interface GameObject {
    fun age():Int
}

class GameObjectDoor(var age: Int) : GameObject{
    override fun age():Int = age;
    override fun toString():String = "{age=$age}";
}

fun main(args: Array<String>) {
    val gameObjects:Array<GameObject> = arrayOf(
                  GameObjectDoor(1), 
                  GameObjectDoor(2), 
                  GameObjectDoor(3));
    for (item: GameObject in gameObjects) {
        when (item) {
            is GameObjectDoor -> {
                var door = item as GameObjectDoor
                println(door)
                //do thomething with door
            }
            //is SomeOtherClass -> {do something}
        }
    }
}
0 голосов
/ 01 ноября 2018

Вы можете использовать , как,? или с операторами в сочетании с умными приведениями для этого.

...