Las clases abstract no pueden ser instanciadas (declarar un objeto cuyo tipo sea esa clase). Sirven únicamente para declarar subclases que deben redefinir aquellos métodos que han sido declarados abstract. Esto no quiere decir que todos los métodos de una clase abstracta deban ser abstractos, incluso es posible que ningun de ellos lo sea. Aún en este último caso, la clase será considerada como abstracta y no podrán declararse objetos de esta clase.
Cuando alguno de los métodos de una clase es declarado abstracto, la clase debe ser obligatoriamente abstracta, de lo contrario, el compilador genera un mensaje de error.
Veamos un ejemplo para entender esto mejor.
abstract class Animal {
String nombre;
int patas;
public Animal (String n, int p){
nombre=n;
patas=p;
}
abstract void habla();
//metodo abstracto que debe ser redefinido por las subclases
}
class Perro extends Animal {
//la clase perro es una subclase de la clase abstracta animal
String raza;
public Perro (String n, int p, String r){
super(n,p);
raza=r;
}
public void habla(){
// este metodo es necesario redefinirlo para poder instanciar
// objectos de la clase perro
System.out.println("Me llamo " +nombre+": GUAU, GUAU");
System.out.println("mi raza es "+raza);
}
}
class Gallo extends Animal{
// la clase gallo es una subclase de la clase abstracta animal
public Gallo (String n, int p){
super (n,p);
}
public void habla(){
// este metodo es necesario redefinirlo para poder instanciar
//objetos de la misma clase
System.out.println("Soy un gallo, Me llamo "+nombre);
System.out.println("kikirikiii");
}
}
class Abstracta {
public static void main (String argumentos[]){
Perro toby = new Perro("toby",4,"San Bernardo");
Gallo kiko = new Gallo("kiriko",2);
kiko.habla();
System.out.println();
toby.habla();
}
}Este código devuelve por pantalla:
Soy un gallo, Me llamo kiriko kikirikiii Me llamo toby: GUAU, GUAU mi raza es San Bernardo
El intento de declara un objeto del tipo Animal, que es Abstract, habría generado un mensaje de error por el compilador.
Las clases abstractas se crean para ser superclases de otras clases. En este ejemplo, se ha declarado el método habla() como abstracto porque queremos que todos los animales puedan hablar, pero no sabemos qué es lo que van a decir (que acciones van a realizar), por lo que es declarada de tipo abstract. Las clases que heredan de Animal deben implementar un método habla() para poder heredar las características de Animal.
Comments
Post new comment