Me encuentro con un problema raro en scala. Siguiente es mi código, clase Empleado extiende clase PersonaDebe anular la variable val en scala
Pero este fragmento de código no se puede compilar, tengo define explícita firstName y lastName como variable val. Porqué es eso ? ¿Significa que tengo que anular la variable val en la clase base? ¿Y cuál es el propósito?
class Person(firstName: String, lastName: String) {
}
class Employee(override val firstName: String, override val lastName: String, val depart: String)
extends Person(firstName,lastName){
}
esta pregunta responde a la pregunta con otra pregunta. Lo cual intentaré responder. La razón por la que tienes que decir 'anular' delante de 'val' en la clase' Extraño 'es decirle al compilador que no tienes la intención de introducir un nuevo campo. 'override' significa aproximadamente" aquí estoy declarando algo que ya está declarado en la clase principal y no pretendo introducir algo que no se herede ". Sin el "reemplazo" 'val' significa" crea un campo público, de solo lectura ". Sin embargo, Scala no permite que dos campos val tengan el mismo nombre. Por lo tanto, la 'anulación' es obligatoria. –
@ TheodoreNorvell - Se suponía que mi punto era que no hay razón para crear la anulación si solo vas a extender la clase original con los mismos campos. Simplemente páselos como parámetros y deje que los vals de la superclase sean vals. –
@RexKerr Ok, ese es un buen punto. Usted estaba preguntando, "¿por qué el' override val'? "; Estaba respondiendo, "¿por qué tiene el 'override' dado que tiene el' val'? ". En el código que estoy escribiendo, tuve una situación similar, pero, en mi caso, la subclase es una clase de caso y, por lo tanto, el parámetro constructor es automáticamente un val. En este caso, el compilador da un mensaje de error a menos que la palabra clave 'override' esté allí y, presumiblemente por razones sintácticas, también requiere la palabra clave 'val'. Las únicas desventajas son estas dos palabras adicionales y que el campo se inicializa dos veces. –