en Scala que iba a escribir una clase abstracta con un atributo abstracto path
:atributos abstractos en Java
abstract class Base {
val path: String
}
class Sub extends Base {
override val path = "/demo/"
}
Java no sabe atributos abstractos y me pregunto cuál sería la mejor manera de solucionar este limitación.
Mis ideas:
a) de parámetros constructor
abstract class Base {
protected String path;
protected Base(String path) {
this.path = path;
}
}
class Sub extends Base {
public Sub() {
super("/demo/");
}
}
b) método abstracto
abstract class Base { // could be an interface too
abstract String getPath();
}
class Sub extends Base {
public String getPath() {
return "/demo/";
}
}
¿Cuál te gusta más? ¿Otras ideas?
Tiendo a utilizar el constructor ya que el valor de la ruta no se debe calcular en tiempo de ejecución.
Advertencia: b) no se compila. Necesita agregar el modificador 'abstracto' al método abstracto. – BalusC
Pregunta relacionada: http://stackoverflow.com/questions/2371025/abstract-variables-in-java – BalusC
FYI: Scala se ejecuta en la JVM, que no admite campos abstractos, por lo que Scala básicamente utiliza métodos abstractos internamente. – RoToRa