1. ESCUELA POLITÉCNICA DEL EJÉRCITO
CIENCIAS DE LA ENERGÍA Y MECÁNICA
INGENIERÍA MECÁNICA
PROGRAMACIÓN I
CLASES ABSTRACTAS E
INTERFACES
Rodrigo Salinas V.
2. CLASES ABSTRACTAS
Una clase que declara la existencia de métodos pero no la implementación de dichos
métodos (o sea, estos métodos no hacen nada, solo son declarados), se considera una
clase abstracta.
Una clase abstracta puede contener métodos no abstractos pero al menos uno de los
métodos debe ser abstracto.
Para declarar una clase o método como abstractos, se utiliza la palabra reservada
abstract.
abstract class Dibujar
{
abstract void miMetodo(int var1, int var2);
String otroMetodo()
{
//instrucciones del metodo
}
}
Una clase abstracta no se puede instanciar (es decir no se pueden volver en objetos)
pero si se puede heredar y las clases hijas serán las encargadas de agregar la
funcionalidad a los métodos abstractos.
3. EJEMPLO
Como ejemplo tomaremos dos figuras geométricas, el Rectángulo y
el Triangulo rectángulo, para el
ejemplo sólo consideraremos dos características similares: el ancho y
el alto, por lo que podemos crear una súper clase Figura geométrica
con estas dos características y sus métodos correspondientes,
además del métodos getArea() que devolverá el área de la Figura.
Pero, se presenta un problema, el
cálculo del área del Rectángulo es diferente al cálculo del área del
Triangulo.
Área del Rectángulo = ancho X alto
Área del Triangulo = (ancho X alto)/2
Por lo tanto, el método getArea() deberá ser abstracto, por lo cual, la
clase Figura también deberá ser abstracta.
4. abstract class Figura {
protected int ancho,alto;
void setDatos(int x,int y) //método no abstracto
{
ancho=x;
alto=y;
}
void mostrarDatos() //método no abstracto
{
System.out.println(ancho);
System.out.println(alto);
}
abstract float getArea(); //método abstracto
}
class Rectangulo extends Figura{
float getArea() //implementación (desarrollo del método)
{
return (ancho*alto);
}
}
5. class Triangulo extends Figura{
float getArea() //implementación (desarrollo del método)
{
return ((ancho*alto)/2);
}
public class prueba {
public static void main(String[] args) {
Rectangulo r=new Rectangulo();
r.setDatos(4,3);
System.out.println(r.getArea());
Triangulo t=new Triangulo();
t.setDatos(4,3);
System.out.print(t.getArea());
}
}
Tipo de dato Protected
Este tipo de datos es privado para todas aquellas clases que no son derivadas, pero
público para una clase derivada de la clase en la que se ha definido la variable como
protected.
6. INTERFACES
Una interface es una variante de una clase abstracta con la condición
de que todos sus métodos deben ser abstractos. Si la interface va a
tener atributos, éstos deben llevar las palabras reservadas static final
y con un valor inicial ya que funcionan como constantes por lo
que, por convención, su nombre va en mayúsculas.
interface Nomina
{
public static final String EMPRESA = "Patito,
S. A.";
public void detalleDeEmpleado(Nomina obj);
}
7. Una clase implementa una o más interfaces
(separadas por comas) con la palabra reservada
implements con el uso de interfaces se puede
“simular” la herencia múltiple que Java no soporta
class Empleado implements Nomina
{
...
}
8. public interface Figura
{
public double area ();
}
En Java, las interfaces se declaran con la palabra reservada
interface de manera similar a como se declaran las clases
abstractas.
En la declaración de una interfaz, lo único que puede
aparecer son declaraciones de métodos (su nombre y
signatura, sin su implementación) y definiciones de
constantes simbólicas
Una interfaz no encapsula datos, sólo define cuáles son los
métodos
que han de implementar los objetos de aquellas clases que
implementen la interfaz.
9. public class Circulo implements Figura
{
private double radio;
public Circulo (double radio)
{
this.radio = radio;
}
public double area ()
{
Return Math.PI*radio*radio;
}
}
public class Cuadrado implements Figura
{
private double lado;
public Cuadrado (double lado)
{
this.lado = lado;
}
public double area ()
{
return lado*lado;
}
}
10. EJEMPLO DE INTERFACES
En el siguiente ejemplo, tomaremos de ejemplo a los animales, se sabe que
todos los animales hablan (literalmente), por ejemplo el perro ladra, el
gato maúlla, etc.
Entonces se puede crear una interfaz Animal con el método hablar()
interface Animal {
public void hablar();
}
Ahora crearemos una clase Perro que implemente la interfaz Animal, por lo que
obligatoriamente tendremos que implementar el método hablar().
public class Perro implements Animal{
public void hablar()
{
System.out.print("guauuu");
}
}
11. Ahora crearemos una clase Gato que implemente la interfaz Animal, por lo
que obligatoriamente tendremos que implementar el método hablar().
public class Gato implements Animal{
public void hablar()
{
System.out.print("miauuu");
}
}
class prueba {
public static void main(String[]
args) {
Perro p=new Perro();
p.hablar();
Gato g=new Gato();
g.hablar();
}
}
12. CONCLUSIONES
Las clases abstractas se usa únicamente para definir
subclases, es una clase que no se puede instanciar.
Usamos una clase abstracta Cuando deseamos definir
una abstracción que englobe objetos de distintos tipos y
queremos hacer uso del polimorfismo.
Una interfaz es una clase completamente abstracta (una
clase sin implementación)