¿La clase necesita tener la palabra clave abstracta antes? O ¿Necesita tener métodos no implementados (abstractos)? ¿Se puede extender cualquier clase normal?¿Se puede extender (heredar) una clase no abstracta en Java?
Respuesta
¿Se puede extender cualquier clase normal?
Sí :) A menos que tenga el modificador final.
1. Se corrigió un poco la redacción ... :) – Tudor
Sí, todos los métodos que no son definitivos (la estática también es un poco diferente del resto), pueden anularse, a menos que la clase en sí se declare definitiva. Los métodos abstractos solo se usan si no se proporciona ninguna implementación en la clase base.
Sí, puede ampliar una clase sin que deba definirse como abstracto. Lo que esto significa es que va a anular los métodos. Por ejemplo, es posible hacer una clase
DifferentString extends String
entonces,
public String toString()
{
return "Something different";
}
Esto significa que usted puede cambiar el comportamiento original de la clase padre.
Referencia:
http://docs.oracle.com/javase/tutorial/java/IandI/abstract.html
Como otros han dicho, sí - pero es una buena práctica para evitar hacerlo si puedes evitarlo, porque se puede terminar con lo que se conoce como el fragile base class problema más fácilmente.
La clase base tan frágil es básicamente cambios en un método de superclase que da como resultado un comportamiento inesperado en la subclase. Pero, ¿es posible si el mismo método se anula en la subclase? –
sí, si ese método reemplazado depende de cualquier otro método en la superclase. Un simple cambio en la superclase puede provocar un comportamiento inesperado en la subclase, incluso si la superclase aún cumple su contrato. – Robert
De la página de Wikipedia, entiendo que usar Interfaces resuelve este problema.Pero, ¿cómo el uso de la palabra clave abstracta evita este problema? (O, ¿cómo no usar la palabra clave abstracta lo causa?) Lo siento, no entiendo completamente. –
No, no es necesario que tenga la palabra abstracta, la palabra abstracta simplemente no le permitirá crear una instancia de esa clase directamente; si utiliza la palabra abstracta, solo puede crear una instancia de las clases que extiendan esa clase abstracta.
AbstractClass abs = new ChildClass();
Aquí hay algunas confusiones de conceptos. Los métodos no implementados residen en una interfaz, y usted puede implementar esa interfaz.
Puede extender cualquier clase siempre que no sea definitiva.
Editar: Lo que quiero decir es que es preferible poner métodos no implementados en las interfaces también. Perdón por la pobre redacción. Las clases abstractas también pueden tener métodos no implementados, aunque terminará con una jerarquía compleja y rígida. .
Una clase abstracta también contiene métodos no implementados ... – quaylar
¿Tengo razón al decir que una clase abstracta DEBE tener al menos un método no implementado? –
No. Puede tener o no tener métodos. –
Sí, pero si la clase está marcada como final, no se puede extender.
class Foo {
//some code here
}
class Boo extends Foo {
}
- 1. ¿Puede un cierre Groovy extender una clase abstracta
- 2. Extender la clase Singleton abstracta
- 3. ¿Puede una clase abstracta extender otra clase abstracta y aumentar la funcionalidad?
- 4. Heredar de una clase o una clase abstracta
- 5. Heredar variable estática de la clase abstracta
- 6. ¿Se puede extender ArrayList en Java?
- 7. ¿Por qué mi clase pública no puede extender una clase interna?
- 8. Derivar clase abstracta de la clase no abstracta
- 9. ¿Puede una clase extender una clase e implementar una interfaz?
- 10. ¿Cómo implementar una clase abstracta en ruby?
- 11. ¿Se puede usar una clase abstracta como tipo de referencia?
- 12. ¿Puede una clase extender dos clases?
- 13. Python: no se puede heredar de una extensión C
- 14. ¿Puede una clase Scala extender múltiples clases?
- 15. ¿Qué métodos puede heredar una subclase en Java?
- 16. ¿Puede una clase anidada de C++ heredar su clase adjunta?
- 17. ¿No se puede heredar de una clase de subprocesos en C#?
- 18. ¿Cómo puede una clase PHP que se extiende a otra heredar una función privada?
- 19. ¿Por qué un rasgo de Scala puede extender una clase?
- 20. ¿Cómo puedo implementar una clase singleton abstracta en Java?
- 21. ¿Por qué una clase no puede extender su propia clase anidada en C#?
- 22. serialización de una clase abstracta
- 23. Método para resolver el error: "no se puede crear una instancia de clase abstracta"
- 24. "No se puede crear una instancia de la clase abstracta o interfaz" mensaje C# error
- 25. No se puede crear una instancia de la clase abstracta o interfaz
- 26. ¿Es posible extender una clase sin constructores en Java?
- 27. clase abstracta no implementa interfaz
- 28. ¿Es una interfaz de Java una clase abstracta?
- 29. Equivalente a extender una clase final en Java
- 30. php clase abstracta extendiendo otra clase abstracta
Ver http://docs.oracle.com/javase/tutorial/java/javaOO/classes.html – DNA
lo que ocurrió cuando has probado :-) – kleopatra