Professional Documents
Culture Documents
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:
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();