Clase Abstracta

Básicamente una clase Abstracta es similar a una clase normal, la estructura es prácticamente igual, ya que poseen nombre, atributos y métodos pero para que una clase sea abstracta la condición es que al menos uno de sus métodos sea abstracto (se le agrega la palabra reservada abstract y no se especifica el cuerpo del método).

Algunas características de una clase abstracta son:


  • No puede ser instanciada (no se pueden crear objetos directamente - new ), solo puede ser heredada.
  • Si al menos un método de la clase es abstract, esto obliga a que la clase completa sea definida abstract, sin embargo la clase puede tener el resto de métodos no abstractos.
  • Los métodos abstract no llevan cuerpo (no llevan los caracteres {}). 


Ejemplo:

import javax.swing.JOptionPane;

public abstract class Animal {

String habitat;

public Animal(String habitat) {
super();
this.habitat = habitat;
}

public abstract void Comunicarse();
//JOptionPane.showMessageDialog(null, "El animal hace un sonido");

public String getHabitat() {
return habitat;
}

public void setHabitat(String habitat) {
this.habitat = habitat;
}
}
public abstract class Herviboro extends Animal{

public Herviboro(String habitat) {
super(habitat);
}

}

public abstract class Mamifero extends Animal{

public Mamifero(String habitat) {
super(habitat);
}


}
public abstract class Carnivoro extends Mamifero {

public Carnivoro(String habitat) {
super(habitat);
}

}
import javax.swing.JOptionPane;

public class Gato extends Mamifero{
public Gato(String habitat) {
super(habitat);
}

public void Comunicarse1(){
JOptionPane.showMessageDialog(null, "El gato maulla");
}

@Override
public void Comunicarse() {
JOptionPane.showMessageDialog(null, getHabitat());
}
}
public abstract class Oviparo extends Herviboro {

public Oviparo(String habitat) {
super(habitat);
}

}
import javax.swing.JOptionPane;

public class Perro extends Mamifero{
public Perro(String habitat) {
super(habitat);
}

public String Comunicarse1(){
String mensaje= "El perro ladra";
return mensaje;
}

@Override
public void Comunicarse() {
JOptionPane.showMessageDialog(null, getHabitat());
}

}
import javax.swing.JOptionPane;

public class Pollo extends Oviparo{
String nom;
public Pollo(String nom, String habitat) {
super(habitat);
   this.nom= nom;
}

public void Comunicarse(){
JOptionPane.showMessageDialog(null, "El habitat del pollo es la granja");
}

}
public abstract class Ejecutar {

public static void main(String[] args) {
//Animal animal= new Animal();
Perro perro= new Perro("El habitat del perro es urbano");
Gato gato= new Gato("El habitat del gato es urbano");
Pollo pollito = new Pollo(null, null);
//animal.Comunicarse();
perro.Comunicarse();
gato.Comunicarse();
pollito.Comunicarse();

}

}