You are on page 1of 4

Clases abstractas:

Una clase abstracta nunca puede ser instanciada (o sea que no podemos crear instancias de ella usando el operador "new"), su nico propsito, misin en la vida, su razn de ser, es ser extendida. Podemos usar una clase abstracta, por ejemplo, si tenemos una clase "Carro" que tiene los mtodos que deben ser implementados en todos los tipos de carros que extienden de l. Un ejemplo de clase abstracta es la siguiente:

abstract class Carro { private double precio; private String modelo; private String anio; public abstract void irRapido(); public abstract void irLento(); // aqu va codigo adicional, importante y serio } En donde hemos declarado que la clase "Carro" es una clase "abstract", adems tiene dos mtodos que hemos marcado tambin como "abstract": "irRapido" e "irLento". El ejemplo anterior compila bien, pero si intentamos instanciar esta clase abstracta de la siguiente forma: Carro x = new Carro(); Obtendremos AnotherClass.java:7: instantiated. Carro x = new Carro(); 1 error Notemos que los mtodos abstractos declarados terminan en punto seguido (;) en lugar de llaves ({}). Si un mtodo es declarado como abstracto, tanto el mtodo como la clase deben ser declarados abstractos, o sea que una clase debe ser abstracta si por lo menos uno de sus mtodos es abstracto. Si cambiamos los mtodos de abstracto a no abstracto no olvidemos de cambiar el punto y como al final por un par de llaves. el class Car is an siguiente abstract class. It can't error: be

Declaracin de interfaces:
Cuando declaramos una interface es como si declarramos un contrato qu debe de hacer la clase sin decir como lo har. Si, por ejemplo, declaramos una interface "Rebotable" con sus mtodos "rebotar" y "setFactorRebote", la clase que implemente esta interface tiene la obligacin de implementar los mtodos "rebotar" y "setFactorRebote". Una interface puede ser implementada por cualquier clase. Podemos tener dos clases diferentes que extiendan de clases diferentes y que no estn relacionadas de ninguna forma, pero al decir que estas clases implementan la interfaz "Rebotable" queremos decir que estas dos clases deben de implementar los mtodos "rebotar" y "setFactorRebote". Como dijimos al inicio: una interfaces es una clase 100% abstracta como mostramos en el siguiente ejemplo: Lo que nosotros declaramos:

interface Rebotable { void rebote(); void setFactorRebote(int fr); }

Lo

que

el

compilador

ve:

interface Rebotable { public abstract void rebote(); public } abstract void setFactorRebote(int fr);

Lo

que

la

clase

que

implementa

la

interface

debe

hacer

public class Pelota implements Rebotable { public void rebote(){}; public void setFactorRebote(int fr){}; }

Mientras una clase abstracta puede definir mtodos abstractos (que deben ser implementados en la clase que utiliza esta clase abstracta) y mtodos no abstractos, una interface solo puede definir mtodos abstractos. Las interfaces tambin cuentan con reglas especficas para su correcta implementacin: Todos los mtodos de una interfaces son implcitamente "public" y "abstract" (pblicos y abstractos), es decir, no es necesario escribir explcitamente estos dos modificadores, pero el mtodo sigue siendo pblico y abstracto. Todas las variables definidas en una interface deben ser pblicas, estticas y finales ("public", "static", "final"), en otras palabras, las interfaces solo declaran constantes, no variables de instancia. Los mtodos de una interface NO deben ser estticos ("static"). Ya que los mtodos de una interface son abstractos, no pueden ser marcados con los modificadores "final", "strictfp" y "native". Una interface puede extender a una o ms interfaces. Una interface no puede implementar a otras interfaces. Una interfaz debe ser declarada con la palabra reservada "interface".

Escribir una interface con el modificador "abstract" resulta redundante ya que al igual que sus mtodos una interface es implcitamente abstracta lo indiquemos o no, por ejemplo: public interface Rebotable{} public abstract interface Rebotable{} Las dos declaraciones anteriores son legales. Al igual que las declaraciones de las interfaces, los mtodos de las mismas no tienen necesidad de ser declarados como abstractos, ya que tambin resulta redundante porque estos son implcitamente abstractos y pblicos, por ejemplo: void rebote(); public abstract void rebote(); Estas Ejemplo dos declaraciones de tambin declaraciones son legales. legales:

void rebote(); public void rebote(); public abstract rebote(); abstract public rebote();

Ejemplo

de

declaraciones

no

legales:

final void rebote(); static void rebote(); private void rebote(); protected void rebote();

Declarando constantes en una interfaz:


Una interface permite declarar constantes, la clase que implemente esta interfaz tiene acceso a las variables de la interfaz implementada como si se tratara de una relacin de herencia. Hay que recordar una regla para declarar constantes: estas deben de ser pblicas, estticas y finales ("public", "static" y "final"), pero no debemos preocuparnos de escribir explcitamente estos modificadores ya que, al igual que las clases y los mtodos, son implcitamente pblicos y abstractos, las variables de una interfaz son implcitamente pblicos, estticos y finales, lo escribamos o no. Una constante a la que le es asignado un valor, no se le puede modificar nunca (hablando en ejecucin, ya que el cdigo puede ser modificado). public interface Rebotable { int NUMERO_CONSTANTE = 5; } En otro archivo: public class Pelota implements Rebotable { public void modificaNumeroConstante() { NUMERO_CONSTANTE = 8; } } Como dijimos anteriormente una constante una vez asignado el valor no puede cambiar, es decir NUMERO_CONSTANTE = 8; no compilar ya que al declararlo en la interfaz "Rebotable" se convierte en una constante y esta no puede ser modificada como se est tratando de hacer en la clase "Pelota".

You might also like