Estas clases se utilizan para permitir que otras clases hereden de ella y proporcionar un modelo a seguir.
La declaración de una clase y método abstracto es el siguiente:
- Public abstract class nombreClase{
- public abstract tipo nombre(argumentos (si los lleva));
- }
Reglas básicas de este tipo de clases:
- Como ya he mencionado, una clase se declara abstracta si tiene algún método abstracto.
- Una clase abstracta no puede crear objetos, es decir, no podemos utilizar "new" para una clase abstracta, ya que tiene métodos que no están definidos.
- Una clase abstracta no puede ser a la vez "final".
- Si una clase hereda de una clase abstracta, deberá de sobreescribir todos los métodos abstractos, si no es así, la clase que hereda deberá ser pasada a abstracta.
- Una clase abstracta puede llevar métodos NO abstractos, pero solo con que exista un método abstracto, la clase deberá ser pasada a abstracta.
- Como los métodos estáticos no pueden ser redefinidos, un método abstracto no puede ser estático.
- Una clase abstracta si puede tener constructores. Como sabemos, no es posible crear objetos de una clase abstracta, pero de una clase, la cual herede de una clase abstracta, si se pueden crear objetos, y como sabemos cuando creamos un objeto de una clase que hereda, la primera llamada de su constructor es una llamada al constructor de la clase "padre", lo que permite que aunque no cree un objeto, si se pueda utilizar su constructor.
Bien, en esta clase abstracta tenemos:
- un atributo de tipo "String" llamado "color".
- Un constructor al cual le pasamos un parámetro de tipo "String".
- 2 métodos abstracto.
- Un método NO abstracto
Creamos una clase llamada cuadrado que herede de Figura la cual posee:
- 2 atributos "x" e "y".
- Un constructor al cual le pasamos 3 parámetros.
- Una llamada al constructor de la superclase "Figura", la cual, como le pusimos un parámetro, a super() le tenemos que pasar un parámetro.
- Los 2 métodos heredados, a los cuales les damos cuerpo.
Creamos una clase Circulo que herede de figura, la cual posee lo siguiente:
- Un atributo.
- Un constructor con parámetros.
- Una llamada al constructor de la superclase "Figura" a la cual le pasamos el parámetro correspondiente.
- Los 2 métodos heredados de "Figura" con cuerpo.
Bien en esta última clase realizamos un pequeño menú con los bucles "SWITCH" y "DO/WHILE".
- Comenzamos introduciendo una opción, por ejemplo 1.
- El switch nos manda a la opción "case 1". En ella se nos pide el radio y el color del futuro Circulo.
- Una vez introducido los datos que nos pide, creamos un objeto de la clase Circulo, al cual le pasamos los parámetros que nos pide. Cabe mencionar, que como ya dijimos, no es posible crear un objeto de la clase "Figura" ya que es una clase abstracta, pero con la ayuda del polimorfismo podemos crear un objeto de la clase Circulo y así poder utilizar atributos y métodos de la clase "Figura"
- Figura f=new Figura();// Esto nos da error
- Figura f=new Circulo();//Esto está bien.
- Nos imprime por pantalla el área, el perímetro y el color.
- Tras esto, nos vuelve aparecer el menú para crear otro objeto, o para salir de la aplicación, en cuyo caso no volverá a aparecer el menú.
No se si me dejo algo, disculpad, si es así. Espero que os haya servido de ayuda.
Un saludo.
Excelente, muchas gracias
ResponderEliminarMe sirvio mucho hermano, explicación sencilla pero concisa, saludos desde México.
ResponderEliminarmexichango
EliminarMuy buena explicacion!!!
ResponderEliminarexcelente! (:
ResponderEliminarMuchas gracias entendi a la perfeccion este tema. Mira que en me costo trabajo aprender pero en unos minutos comprendi muy bien el concepto.
ResponderEliminarSigue adelante...saludos desde Peru
excelente explicacion, muchas gracias
ResponderEliminarGracias, me ha sido de gran ayuda y sencillo de entender.
ResponderEliminarQue buena informacion, corta, concreta y precisa, muy buen trabajo.
ResponderEliminarmuchas gracias BARTOLOMÉ
ResponderEliminarLa definición esta mal, una clase abstracta NO PERMITE QUE OTRAS HEREDEN de ella, sino que solo se implementan
ResponderEliminarBien!
ResponderEliminarMuy bien
ResponderEliminarGracias por su explicacion!
ResponderEliminar