Ir a contenido principal

Al hacer clic en Enviar, usted está de acuerdo con los términos y condiciones de developerWorks.

La primera vez que inicie sesión en developerWorks, se creará un perfil para usted. Cierta información de su perfil de developerWorks será mostrada públicamente, pero usted puede editar la información en cualquier momento. Su nombre, apellido (a menos que usted elija ocultarlo) y nombre de usuario acompañarán el contenido que usted publique.

Toda la información enviada es segura.

  • Cerrar [x]

La primera vez que inicia sesión en developerWorks se crea un perfil para usted, teniendo que elegir un nombre para mostrar en el mismo. Este nombre acompañará el contenido que usted publique en developerWorks.

Por favor elija un nombre de 3 - 31 caracteres. Su nombre de usuario debe ser único en la comunidad developerWorks y debe ser distinto a su dirección de email por motivos de privacidad.

Al hacer clic en Enviar, usted está de acuerdo con los términos y condiciones de developerWorks.

Toda la información enviada es segura.

  • Cerrar [x]

Introducción a la programación Java, parte 2: Construcciones para aplicaciones del mundo real

Funciones más avanzadas del lenguaje Java

J. Steven Perry, Consultor Director, Makoto Consulting Group, Inc.
J. Steven Perry
J. Steven Perry es desarrollador de software, arquitecto y fanático general de Java que ha estado desarrollando software profesionalmente desde 1991. Sus intereses profesionales abarcan desde el funcionamiento interno de la JVM hasta el modelo UML y todo lo que está en el medio. Steve tiene una pasión por escribir y ser mentor. Es el autor de Java Management Extensions (O'Reilly), Log4j (O'Reilly) y los artículos de developerWorks de IBM "Joda-Time" y OpenID for Java Web applications". Pasa tiempo libre con sus tres hijos, anda en bicicleta y enseña yoga.

Resumen:  En la Parte 1 de este tutorial, el programador Java™ profesional J. Steven Perry presentó la sintaxis del lenguaje Java y las bibliotecas que usted necesita para escribir aplicaciones Java simples. La Parte 2, todavía orientada a desarrolladores nuevos en el desarrollo de aplicaciones Java, presenta las construcciones de programación más sofisticadas requeridas para crear complejas aplicaciones Java del mundo real. Los temas que se cubren incluyen manejo de excepciones, herencia y abstracción, expresiones regulares, genéricos, E/S Java y serialización Java.

Ver más contenido de esta serie

Fecha:  10-12-2012
Nivel:  Introductoria PDF:  A4 and Letter (927 KB | 54 páginas)Get Adobe® Reader®

Comentario:  

Interfaces

En esta sección, comience a aprender acerca de las interfaces y comience a usarlas en su código Java.

Definición de una interfaz

Una interfaz es un conjunto denominado de comportamientos (o elementos de datos contantes) para el cual un implementador debe proporcionar códigos. Una interfaz especifica el comportamiento que la implementación proporciona pero no cómo se realiza.

Definir una interfaz es sencillo:

public interface  interfaceName {
 returnType methodName( argumentList );
}

Una declaración de interfaz parece una declaración de clases, excepto que usted usa la palabra clave interface. Puede nombrar la interfaz del modo que quiera (sujeto a las reglas del lenguaje) pero, por convenio, los nombres de interfaces se parecen a los nombres de clases.

Los métodos definidos en una interfaz no tienen cuerpo de método. El implementador de la interfaz es responsable de proporcionar el cuerpo de método (del mismo modo que con los métodos abstractos).

Defina las jerarquías de las interfaces, como lo hace para las clases, con la excepción de que una sola clase puede implementar tantas interfaces como quiera. (Recuerde, una clase puede ampliar solo una clase). Si una clase amplía a otra e implementa una interfaz o interfaces, entonces las interfaces se enumeran luego de la clase ampliada, como a continuación:

public class Manager extends Employee implements BonusEligible, StockOptionRecipient {
// Etc...
}

Interfaces marcadoras

Una interfaz no necesita tener ningún tipo de cuerpo. De hecho, la siguiente definición es perfectamente aceptable:

public interface BonusEligible {
}

En términos generales, dichas interfaces se denominan interfaces marcadoras porque marcan una clase que implementa esa interfaz pero no ofrece ningún comportamiento explícito especial.

Una vez que sabe todo eso, en realidad definir una interfaz es fácil:

public interface StockOptionRecipient {
 void processStockOptions(int numberOfOptions, BigDecimal price);
}


Implementación de interfaces

Para usar una interfaz, la implementa, que simplemente significa proporcionar un cuerpo de método, que a su vez proporciona el comportamiento para cumplir el contrato de la interfaz. Eso se hace con la palabra clave implements:

public class className extends superclassName implements interfaceName {
// Class Body
}

Suponga que usted implementa la interfaz StockOptionRecipient en la clase Manager, como se muestra en el Listado 15:


Listado 15. Implementación de una interfaz

public class Manager extends Employee implements StockOptionRecipient {
 public Manager() {
 }
 public void processStockOptions (int numberOfOptions, BigDecimal price) {
   log.info("I can't believe I got " + number + " options at $" + 
            price.toPlainString() + "!");  }
}

Cuando implementa la interfaz, usted proporciona el comportamiento para el o los métodos en la interfaz. Debe implementar los métodos con firmas que coincidan con las de la interfaz, con la incorporación del modificador de acceso public.

Generación de interfaces en Eclipse

Eclipse puede generar fácilmente la firma correcta del método por usted si decide que una de sus clases debería implementar una interfaz. Solo cambie la firma de la clase para implementar la interfaz. Eclipse pone una línea ondulante roja debajo de la clase y la distingue así como un error porque la clase no proporciona el o los métodos en la interfaz. Haga clic en el nombre de la clase con su ratón, presione Ctrl + 1 y Eclipse le sugerirá "arreglos rápidos". De estos, elija Add Unimplemented Methods y Eclipse generará los métodos por usted, ubicándolos al final del archivo de origen.

Una clase abstracta puede declarar que implementa una interfaz particular pero no se le requiere que implemente todos los métodos en esa interfaz. Esto sucede porque no se requieren clases abstractas para proporcionar implementaciones para todos los métodos que afirman implementar. Sin embargo, la primera clase concreta (es decir, la primera que se puede crear como instancia) debe implementar todos los métodos que la jerarquía no implementa.


Uso de interfaces

Una interfaz define un nuevo tipo de datos de referencia, lo que significa que usted puede referirse a una interfaz en cualquier lugar en el que usted se referiría a una clase. Esto incluye los casos en que usted declara una variable de referencia o proyecta de un tipo a otro, como se muestra en el Listado 16.


Listado 16. Asignación de una nueva instancia Manager a una referencia StockOptionEligible

public static void main(String[] args) {
 StockOptionEligible soe = new Manager();// perfectly valid
 calculateAndAwardStockOptions(soe);
 calculateAndAwardStockOptions(new Manager());// works too
}
. . .
public static void calculateAndAwardStockOptions(StockOptionEligible soe) {
 BigDecimal reallyCheapPrice = BigDecimal.valueOf(0.01);
 int numberOfOptions = 10000;
 soe.processStockOptions(numberOfOptions, reallyCheapPrice);
}

Como puede ver, es perfectamente válido asignar una nueva instancia Manager a una referencia StockOptionEligible, así como pasar una nueva instancia Manager a un método que espera una referencia StockOptionEligible.


Asignaciones: Clases

Cuando asigne una referencia de una clase que implemente una interfaz a una variable de un tipo de interfaz, puede hacerlo pero hay reglas. Desde el Listado 16, vemos que asignar una instancia Manager a una referencia de variable StockOptionEligible es perfectamente válido. La razón es que la clase Manager implementa esa interfaz. Sin embargo, la siguiente asignación no sería válida:

  Manager m = new Manager();
  StockOptionEligible soe = m; //okay
  Employee e = soe; // Wrong!
  

Debido a que Employee es un supertipo de Manager, al principio esto puede parecer bien, pero no lo es. Debido a que Manager es una especialización de Employee, es *diferente* y, en este caso particular, implementa una interfaz que Employee no implementa.

Las asignaciones como estas siguen las reglas de asignación que vimos en Inheritance. Y del mismo modo que sucede con las clases, solo puede asignar una referencia de interfaz a una variable del mismo tipo o a un tipo de superinterfaz.

6 de 14 | Anterior | Siguiente

Comentario



static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=90
Zone=tecnologia Java
ArticleID=850709
TutorialTitle=Introducción a la programación Java, parte 2: Construcciones para aplicaciones del mundo real
publish-date=12102012
author1-email=steve.perry@makotoconsulting.com
author1-email-cc=