¿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.

  • Error de la aplicación porque la instancia de la aplicación lateinit no se ha inicializado
  • ¿Por qué tengo que devolver Unit.INSTANCE al implementar en Java una function Kotlin que devuelve una Unidad?
  • Daga 2: inputs múltiples con la misma key
  • ¿Cuál es el equivalente de los campos finales estáticos de Java en Kotlin?
  • Kotlin: Convertir list grande a sublist de tamaño de partición establecido
  • ¿Cómo se soluciona la initialization del campo val con el proxy Spring Security?
  • No se puede ejecutar el file jar. (Error: no se pudo encontrar o cargar la class principal co.pissarra.Mainkt)
  • Kotlin: lanza una exception personalizada
  • Android: Kotlin con cuchillo de mantequilla
  • ¿Cómo se ejecutan las testings de Spek con Maven?
  • Proguard: no ofusque las classs de datos de Kotlin