Objeto de inheritance rápida y significado de la interfaz

En Kotlin, encuentro que la documentation del object es un ejemplo:

open class A(x: Int) { public open val y: Int = x } interface B {...} val ab: A = object : A(1), B { override val y = 15 } 

Entonces implementé ese ejemplo con nombres más significativos y no tengo idea de cuál es el motivo de la interfaz entre la list de supertypes separados por comas del object.

 interface Toy { fun play () { println("Play, play....") } } open class Ball(public open val color: String = "networking") {} val ball: Ball = object : Ball(), Toy { override val color : String = "blue" override fun play() { println("Bounce, bounce...") } } fun main(args: Array<String>) { println(ball.color) // no ball.play() here then why the interface in the example ??? } 

    Estás en lo cierto, la interfaz B (o en tu ejemplo, Toy ) no será directamente accesible a través de esta reference si A (o Ball ) no la implementa.

    La inheritance de esa interfaz probablemente se haya agregado aquí para que este ejemplo destinado a mostrar cómo se pasan los parameters del constructor a una superclass también pueda mostrar la inheritance de múltiples types muy rápidamente. O al less eso es lo que deduzco del text que lo acompaña:

    Si un supertipo tiene un constructor, se le deben pasar los parameters de constructor apropiados. Muchos supertypes se pueden especificar como una list separada por comas después de los dos puntos.


    Para llegar al tema de no poder usar el object creado como B (o Toy ) aquí: esto no hace que la característica del lenguaje sea inútil, ya que el object creado todavía se puede usar a través de sus múltiples interfaces a través del casting. Por ejemplo, en tu ejemplo, puedes hacer esto:

     (ball as Toy).play() 

    O en el ejemplo original, puede hacer el tipo Any , y luego enviarlo a las diferentes interfaces según sea necesario.

    Ha creado una instancia de una class anónima que henetworkinga de la class Ball y al mismo time implementa la interfaz Toy .

    Pero, ambos types son exclusivos, es decir. Ball no es un Toy (en tu ejemplo), por lo que no puedes llamar a play() en una reference a Ball .