java - una - ¿En qué se diferencia la clase abstracta de la clase concreta?
metodo abstracto ejemplo (6)
Clase abstracta significa que es abstracto no completo. Necesita otra clase para completarlo y / o sus funcionalidades. Necesitas extender la clase abstracta. Será útil con cierta clase, por ejemplo. Fruta todas las frutas tienen la misma propiedad que el color. Pero puede tener diferentes propiedades para diferentes frutas como es pulposo como naranja o no, por ejemplo, plátano, etc.
Entiendo por qué necesitamos Abstract Class en Java - para crear subclases. Pero lo mismo se puede lograr por clase concreta. Ej. Clase infantil se extiende padre. Aquí los padres pueden muy bien ser abstractos y concretos. Entonces, ¿por qué tenemos RESUMEN?
El punto de abstracción no es crear subclases. Se trata más de crear Seams en tu código. Desea que el código pueda probarse y desacoplarse, lo que lleva al objetivo final de mantenimiento. Por razones similares, la abstracción también nos ofrece la posibilidad de reemplazar un poco de código sin efectos secundarios.
Las clases abstractas no pueden ser instanciadas directamente. Declarar una clase como abstracta significa que no desea que se cree una instancia y que la clase solo se puede heredar. Usted está imponiendo una regla en su código.
Si amplía el ejemplo de la relación padre / hijo para incluir una clase de persona, sería sensato que la persona sea abstracta. El padre es una idea concreta y también lo es el niño. La persona es un concepto abstracto tanto en la realidad como en el código.
Un beneficio es que usted define y protege explícitamente la idea de la clase abstracta. Cuando declara una clase como un resumen, no hay forma de que usted u otra persona que use su código lo use incorrectamente al crear una instancia. Este razonamiento es similar a por qué especificamos funciones y campos como públicos, privados o protegidos. Si declara que una función o miembro es privado, en efecto lo está protegiendo de un acceso incorrecto desde el código del cliente. Los privados están destinados a ser utilizados dentro de la clase y eso es todo. Las clases abstractas están destinadas a ser heredadas y eso es todo.
Ahora, ¿tiene que usar clases abstractas y definir funciones y campos como privados en lugar de públicos? No tu no Pero estos conceptos se proporcionan para ayudar a mantener el código limpio y bien organizado. La clase abstracta se implementa en todos los lenguajes orientados a objetos, que yo sepa. Si miras a tu alrededor, verás que C ++, C #, VB.NET, etc., utilizan este concepto.
Un mejor ejemplo específico:
En el ejemplo anterior, la clase de Forma debería ser abstracta porque no es útil por sí sola.
Sé que esta es una pregunta antigua, pero parece que el cartel aún tenía algunas preguntas sobre el beneficio de usar una clase abstracta.
Si usted es el único que usará su código, entonces realmente no hay beneficio. Sin embargo, si está escribiendo un código para que otros lo usen, hay un beneficio. Digamos, por ejemplo, que ha escrito un marco de almacenamiento en caché, pero desea permitir que los clientes creen sus propias clases de implementación de almacenamiento en caché. También desea realizar un seguimiento de algunas métricas, como la cantidad de cachés que están abiertas, hipotéticamente. Tu clase abstracta podría verse algo como esto:
public abstract class AbstractCache {
public final void open() {
... // Do something here to log your metrics
openImpl();
}
protected abstract void openImpl() { }
}
Por sí sola, la clase AbstractCache es inútil y no desea que los clientes intenten crear una instancia y usarla como caché, lo que podrían hacer si la clase fuera concreta. También desea asegurarse de que no puedan omitir su registro de métricas, lo que podrían hacer si les proporcionara una interfaz de caché.
Segun mi entendimiento
Clase abstracta es una clase que solo describe el comportamiento pero no lo implementa. Considere este ejemplo de Java para la clase abstracta:
public interface DoSomething(){
public void turnOnTheLight();
}
Las clases concretas son aquellas que deben ser implementadas. Por ejemplo:
public abstract class A(){
public void doIt();
}
public class B extends A(){
public void doIt(){
//concrete method
System.out.println(“I am a Concrete Class Test”);
}
}
En otras palabras, una clase concreta en java es cualquier clase de este tipo que tiene implementación de todos sus miembros heredados desde la interfaz o la clase abstracta.
Una clase abstracta debe utilizarse como la clase base de la que se derivan otras clases. Se espera que la clase derivada proporcione implementaciones para los métodos que no se implementan en la clase base. Una clase derivada que implementa toda la funcionalidad faltante se llama una clase concreta