¿Por qué las clases Java no pueden tener campos abstractos como pueden tener métodos abstractos?¿Por qué no campos abstractos?
Por ejemplo: Tengo dos clases que extienden la misma clase base abstracta. Estas dos clases tienen cada una un método que es idéntico, excepto por una constante de cadena, que resulta ser un mensaje de error, dentro de ellas. Si los campos pudieran ser abstractos, podría hacer este resumen constante e incorporar el método a la clase base. En cambio, tengo que crear un método abstracto, llamado getErrMsg()
en este caso, que devuelve el String, anula este método en las dos clases derivadas, y luego puedo extraer el método (que ahora llama al método abstracto).
¿Por qué no podría simplemente hacer el resumen de campo para empezar? ¿Podría Java haberse diseñado para permitir esto?
Parece que podría haber esquivado este problema al hacer que el campo no sea constante y simplemente suministrar el valor a través del constructor, terminando con 2 instancias de una clase en lugar de 2 clases. – Nate
Al hacer un resumen de campos en una superclase, tiene que especificar que cada subclase debe tener este campo, por lo que no es diferente de un campo no abstracto. –
@peter, no estoy seguro de estar siguiendo su punto. si se especificó una constante no abstracta en la clase abstracta, entonces su valor también es constante en todas las subclases. si fuera abstracto, su valor debería ser implementado/suministrado por cada subclase. entonces, no sería lo mismo en absoluto. – liltitus27