Privacidad: Recuerde que la información escrita en los foros de programación es 100% pública y que su ip será registrada asociada a su mensaje. Si encuentra un mensaje fuera de lugar, por favor, notifiquelo para su revisión y eliminación.
¿Qué es una clase abstracta en java?
Enviado por logos del 85 el día 11 de junio de 2006
Soy un novato en la programación.
Quiero saber si hay alguien quien me pueda resolver esta duda, por que yo no logro resolverla.
Ya llevo un buen tiempo investigaando y no le doy respuesta a mi dada.
Gacias por su ayuda!!!
Para definir una clase abstracta hay dos puntos importantes que se deben entender :
1. Cuando se define una clase abstracta no se podra crear instancias de esta clase. Esto significa de que no podras hacer esto MiClaseAbstracta MiObjeto = new MiClaseAbstracta();
2.El segundo punto es que defines métodos los cuales no serán implementados en la clase Abstracta sino mas bien en una clase que derive de esta clase abstracta la cuál si implementara dichos métodos. Pero tambien se debe aclarar de que este punto no es del todo cierto la mayor parte de las veces no se implementan los métodos pero en otras sí, esta permitido pero se supone que lo que estas definiendo es comportamiento.
Por ejemplo se quiere implementar un simulador de carrera con diferentes tipos de Automoviles(Coches) pudiendo estos ser un Escarabajo(menos rapido), Toyota Celica(mas rapido) y otros mas entonces como primer punto vemos de que existe un comportamiento similar en todos estos Automoviles que es acelerar, frenar, Cambiar Caja y algo mas que se le pueda encontrar.
Entonces analizando el problema surge una duda los diferentes coches tienen el mismo comportamiento pero lo realizan de diferente manera. El escarabajo acelerara con menos rapidez que el celica y otros, de igual forma se ve esto en el cambio de caja. Entonces como solucion a esto se puede plantear la creacion de una clase abstracta que me defina el comportamiento y las clases que deriven de esta las implementen segun su propio comportamiento.
--------------------------------------------------
abstract class Automovil {
. . .
abstract void acelerar();
abstract void frenar();
abstract void cambiar_de_caja();
. . .
}
class Escarabajo extends Automovil {
. . .
void acelerar() {
// codigo para dibujar Circulo
. . .
}
void frenar() {
// codigo para dibujar Circulo
. . .
}
void cambiar_de_caja() {
// codigo para dibujar Circulo
. . .
}
}
class Celica extends Automovil {
. . .
void acelerar() {
// codigo para dibujar Circulo
. . .
}
void frenar() {
// codigo para dibujar Circulo
. . .
}
void cambiar_de_caja() {
// codigo para dibujar Circulo
. . .
}
}
----------------------------------------------------
Luego ya podras instanciar de las clases derivadas
Escarabajo MiEscarabajo = new Escarabajo();
Celica MiCelica = new Celica();
----------------------------------------------------
Nota.- * No sera necesario implementar todos los métodos en las clases que deriven de una abstracta eso si deberas declararlos.
* Basta con que definas a un método abstracto para que toda la clase se defina como abstracta
Bueno Espero que la explicación te sea de utilidad y cualquier duda hazla saber.
Hola, la explicación dada es buena. Queda bastante claro lo que es una clase abstracta.
Pero entonces, cual es la diferencia entre una clase abstracta y un interface???
Me parecen conceptos muy similares y la única diferencia que aprecio es que con las clases abstractas solo puedo extender de una mientras que con los interfaces puedo implementar varios.
A nivel de funcionalidad existe alguna diferencia???
Un saludo.
Sí, en una interfaz no existen propiedades (únicamente puede haber constantes) y métodos públicos sin implementar, mientras que en las clases abstractas puede haber métodos sin implementar o estar todos implementados, ser privados, públicos y protegidos. Las interfaces hacen el código menos dependiente, ya que no hay propiedades variables que puedan se afectadas por las clases que lo implementan-
Respecto a la herencia múltiple, con interfaces nunca tendrás problemas, dada su defiición, pero si estuviera permitida la herencia múltiple de clases, podría haber problemas con las implementaciones, mira el siguiente ejemplo:
public class A{
Object [] array;
...
public void rellenar(){
for(int i=0;i<array.length;i++)
array[i]=new Integer(i);
}
...
}
public class B{
Object [] array;
...
public void rellenar(){
for(int i=0;i<array.length;i++)
array[i]=new Double(i+0.5);
}
...
}
public class AB extens A,B{
...
}
public class PruebaAB{
public static void main(String [] args){
AB objeto=new AB...
objeto.rellenar() !!!!!!!!!!!!->¿Cuál?
}
}
Se puede ver que no es posible determinar que método rellenar se utiliza en la clase AB, cuando hemos utilizado una sintaxis perfectamente válida (a excepciòn de la herencia múltiple). Si fuesen interfaces, la clase AB implementaría el método rellenar() y no habría este tipo de problema.
Re: Re: Re: Re: ¿Qué es una clase abstracta en java?
Enviado por paco el día 9 de julio de 2008
1) una clase abstracta es aquella que implementa al menos un método abstracto (no definido). pej. FIGURA implmenta color (definido), y área no definida, pq se puede calcular de manera diferente area de circulo o rectángulo, por eso la deja abstracta, que la clase heredera defina.
2) interface es cuando TODAS las clases son abstractas, solo define las caracteristicas que va a tener: tamaño, color, area... aunque no define ninguna.