Skip to content

Latest commit

 

History

History
143 lines (105 loc) · 2.94 KB

File metadata and controls

143 lines (105 loc) · 2.94 KB

Herencia y polimorfismo

OBJETIVO

  • Heredar de subclases
  • reescribir métodos heredados

REQUISITOS

  1. Haber terminado el Ejemplo 1

DESARROLLO

Vamos a perfeccionar la clase Koopa

  1. Imprimir el estado de Koopa cada que este cambie (borrar la impresión actual cuando colisiona con un Weapon)
Solución
set(value) {
        field = value
	println("El estado es ahora $field")
    }
  1. La primera vez que un Koopa colisiona con un Weapon, se vuelve shell: la segunda vez se muere. Reproducir este partón en la clase
Solución
if(state=="Shell"){
	die()
} else{
	state = "Shell"
}
  1. Comprobar los ejercicios anteriores haciendo que un Koopa colisione dos veces con un Weapon.
Solución
if(state=="Shell"){
	die()
} else{
	state = "Shell"
}

en consola se debe reproducir lo siguiente:

El estado es ahora Shell

Koopa ha muerto

  1. A partir de la clase Koopa, crear la clase de Koopas voladores (Koopa paratroopa). Su estado inicial es Volando, al colisionar por primera vez camina, a la segunda se vuelve concha y a la tercera muere.
Solución

Primero hay que volver a la clase Koopa open y volver la clase estado a protected

open class Koopa:
...
protected open var state = "Walking"

Después creamos la clase que hereda de Koopa y reescribimos el colisionador, inicializamos el estado como flying

class KoopaParatroopa: Koopa() {

    override var state= "Flying"
    
    override fun collision(collider: String){
        when(collider){
            "Weapon" -> {
                if(state=="Shell"){
                    die()
                } else if(state=="Walking"){
                    state = "Shell"
                } else{
                    state = "Walking"
                }
            }
            "Enemy" -> changeDirection()
        }
    }

}
  1. Comprobar el ejercicio anterior haciendo que un Koopa paratroopa colisione tres veces con un Weapon.
Solución

Primero hay que volver a la clase Koopa open y volver la clase estado a protected

open class Koopa:
...
protected var state = "Walking"

Después creamos la clase que hereda de Koopa y reescribimos el colisionador, inicializamos el estado como flying

class KoopaParatroopa: Koopa() {

    init{
        state="Flying"
    }
    override fun collision(collider: String){
        when(collider){
            "Weapon" -> {
                if(state=="Shell"){
                    die()
                } else if(state=="Walking"){
                    state = "Shell"
                } else{
                    state = "Walking"
                }
            }
            "Enemy" -> changeDirection()
        }
    }

}