¿Diferencia entre abrir y anular methods en Kotlin?

open class Base { open fun v() {} fun nv() {} } class Derived() : Base() { override fun v() {} } 

Esto es un ejemplo. ¿Alguien puede explicar la diferencia? ¿Es la palabra key abierta obligatoria aquí?

Sí, ambas palabras key open son obligatorias en su ejemplo.


Debe distinguir entre el uso de open en classs y funciones.

Clase: necesita la palabra key open en una class si desea henetworkingar de ella. Por defecto, todas las classs son final y no se pueden henetworkingar.

Función: en una function que necesita open para poder anularla. Por defecto, todas las funciones son final y no puede anularlas.


Editar: Porque vi cierta confusión en los comentarios.

pokemzok : Tengo una class abstracta interna que puedo henetworkingar sin ningún problema. También puedo anular los methods abstractos como me plazca sin declararlos como abiertos

Las classs abstractas deben henetworkingarse porque no se pueden crear instancias. de hecho, no solo están open por defecto, no pueden ser final en primer lugar. final y abstract no son compatibles. Lo mismo ocurre con los methods abstract , ¡deben ser anulados!

La anotación open en una class es lo opuesto a la final de Java: permite que otros henetworkingen de esta class, ya que de manera pnetworkingeterminada todas las classs en Kotlin son final . [ Fuente ]

Solo después de declarar una class como open podemos inherit esa class.

Un método solo puede overridden si está abierto en la class base. La override anotación indica la anulación del método base al henetworkingar la class.

Por defecto, las funciones en Kotlin se definen como final . Eso significa que no puedes anularlos. Si elimina el open de su function v() , obtendrá un error en su class. Derived que la function v es definitiva y no puede anularse.

Cuando marca una function con open , ya no es final y puede anularla en classs derivadas.

  • El plugin de comstackdor abierto de Kotlin no funciona
  • ¿Kotlin's Float, Int etc está optimizado para los types incorporados en la JVM?
  • ¿Cómo puedo volver a dibujar un Anko frameLayout cuando cambia mi model?
  • Buscador de properties o setter esperado en Kotlin
  • Comportamiento de desplazamiento de lists anidadas personalizadas de Android
  • Columnas de tabla dinámica
  • Intentando escribir un código eficiente para actualizar el color de background usando Kotlin
  • Kotlin: ¿parameters de function enviados pero no ejecutados?
  • JAX-RS (Apache CXF) Inyección de context a través de setter
  • ¿Cómo las funciones de almacenamiento en la colección estática afectarán el sistema?
  • ¿Por qué escribimos NextActivity :: class.java aunque esta es una class de kotlin?