Tags Palabras claves

Las interfaces en Java

21/06/2005 - 06:58 por sabrina | Informe spam
En este link
http://64.233.179.104/search?q=cache:U-56e-Dr6WcJ:mami.uclm.es/jbravo/docencia/componentes/Presentaciones_0405/Interfaces.pdf+%22la+clase+KeyAdapter%22+%2B+%22java%22&hl=es

indican que "Una variable de referencia de tipo interfaz sólo tiene
conocimiento de los métodos que hay en la declaración de la interfaz"
y para lo cual dan el siguiente ejemplo :

interface Saludo {void diHola();}
class C1 implements Saludo {public void diHola() {System.out.println("Hola,
Mundo!");}}
class C2 implements Saludo {public void diHola() {System.out.println("Hello,
World!");}}

class Prueba {
public static void main (String [] args)
{Saludo s = new C1();
s.diHola();
C2 cdos = new C2();
s = cdoss.diHola();
}
}
Resultado Hola, Mundo!
Hello, World!

Sinceramente,no entiendo que es lo que quieren demostrar con la clase "
Prueba" de este ejemplo.
¿alguien fuera tan amable de explicarme esto?

Sabrina

Preguntas similare

Leer las respuestas

#1 Luis Miguel Cisneros León
21/06/2005 - 13:56 | Informe spam
Las interfaces son una especie de "Contrato"

Tu defines una interfaz, en dicha interfaz solo declaras métodos, sin
cuerpo.

Luego dices que una clase implementa una interfaz. Esto obliga a la
clase a implementar cada uno de los métodos que declara la interfaz.

Ahora... para que me sirve esto???????????????

veamos este Ejemplo:

interface Volador {

public void volar();
piblic void despegar();
}

class Avion implements Volador {

public void volar() {

System.out.println("el avion vuela");
}

public void despear() {

System.out.println("el avion enciende los motores y despega");

}
}

class Ave implements Volador {

public void volar() {

System.out.println("el ave planea y aletea pocas veces");
}

public void despear() {

System.out.println("el ave aletea y despega ");

}
}

public class Prueba {

public static void main(String a[]) {

Volador ave = new Ave();

Volador avion = new Avion();

ave.volar();
avion.volar();


Volador cualquiera = new Avion();

cualquiera.despegar();

cualquiera = new Ave();

cualquiera.despegar();

}
}


Fijate que usamos una variable del tipo Volador llamada cualquiera.
Lo que nosotros sabemos es que Volador tiene un método llamado despegar
y otro llamado Volar; no me importa que hace ese método, lo que a mi me
interesa es que lo tenga y que yo pueda ejecutarlo. Como la interfaz lo
tiene, la clase que implementa la interfaz también lo tiene, y lo
implemento (lo lleno con código).

así, a una variable del tipo Volador le asigno un objeto del tipo Avión,
es legal ya que Avion es un Volador (lo implementa) y como un volador
sabe volar(no me importa como lo haga) yo ejecuto el método volar() sea
un Ave o un Avión.


Con esto logras una de las máximas de la OO, el Polimorfismo...

Saludos
Luis Cisneros

'sabrina wrote:
En este link
http://64.233.179.104/search?q=cache:U-56e-Dr6WcJ:mami.uclm.es/jbravo/docencia/componentes/Presentaciones_0405/Interfaces.pdf+%22la+clase+KeyAdapter%22+%2B+%22java%22&hl=es

indican que "Una variable de referencia de tipo interfaz sólo tiene
conocimiento de los métodos que hay en la declaración de la interfaz"
y para lo cual dan el siguiente ejemplo :

interface Saludo {void diHola();}
class C1 implements Saludo {public void diHola() {System.out.println("Hola,
Mundo!");}}
class C2 implements Saludo {public void diHola() {System.out.println("Hello,
World!");}}

class Prueba {
public static void main (String [] args)
{Saludo s = new C1();
s.diHola();
C2 cdos = new C2();
s = cdoss.diHola();
}
}
Resultado Hola, Mundo!
Hello, World!

Sinceramente,no entiendo que es lo que quieren demostrar con la clase "
Prueba" de este ejemplo.
¿alguien fuera tan amable de explicarme esto?

Sabrina






MindArs C.A. Luis Miguel Cisneros León
Consultor / Instructor
División de Consultoría en Java™
MindArs C.A.

Av. Francisco de Miranda, Centro Profesional Miranda
Piso 4, Oficina 4-D, Chacao, Caracas - 1060
Distrito Capital - Venezuela

Teléfonos: +58-212-2646581 / 4168586
Celular: +58-414-3015074
E-Mail: <mailto:
Web Site: http://www.mindars.com <http://www.mindars.com>

*Aviso Legal: *
Este mensaje es privado y confidencial, y está dirigido exclusivamente a
su(s) destinatario(s). Si usted ha recibido este mensaje por error, debe
abstenerse de distribuirlo, copiarlo o usarlo en cualquier sentido.
Asimismo, le agradecemos comunicarlo al remitente y borrar el mensaje y
cualquier documento adjunto.
Respuesta Responder a este mensaje
#2 sabrina
21/06/2005 - 17:53 | Informe spam
Hola Luis :
Entiendo que todas las clases que implementan una interfaz debe
sobreescribir los metodos vacios de la interfaz para darles la utilidad mas
conveniente. Pero volviendo al ejemplo que me das (esto del polimorfismo me
cuesta entender su utilidad) te expreso lo siguiente:
No veo la diferencia entre crear una clase Avion y otra Ave, en la cual , a
cada una de ellas les ponga los metodos volar() y despegar()
y escribiendo en cada uno de ellos lo necesario segun se trate de Avion o
Ave , de esta forma (observa que no uso Implements):

class Avion {
public void volar() { System.out.println("el avion vuela"); }
public void despegar() {System.out.println("el avion enciende los motores
y despega"); }
}
class Ave {
public void volar() {System.out.println("el ave planea y aletea pocas
veces"); }
public void despegar() {System.out.println("el ave aletea y despega
"); }
}

Luego

public class Prueba {
public static void main(String a[]) {
Ave ave = new Ave();
Avion avion = new Avion();
ave.volar();
avion.volar();
ave.despegar();
avion.despegar();
}
}

Como veras, puedo usar los metodos volar() y despegar() de igual forma, es
decir sin tener que usar ninguna Interfaz, es por ello que no logro entender
cual es la utilidad o ventaja concreta de utilzar Interfaces .
Espero haberme dejado entender en donde esta mi duda con respecto al
polimorfismo y en consecuencia a las interfaces.
Disculpa Luis si estoy abusando de tu tiempo, pero creo que entender estos
puntos es importante para entender Java.

Sabrina,


.
"Luis Miguel Cisneros León" escribió en el mensaje
news:
Las interfaces son una especie de "Contrato"

Tu defines una interfaz, en dicha interfaz solo declaras métodos, sin
cuerpo.

Luego dices que una clase implementa una interfaz. Esto obliga a la clase
a implementar cada uno de los métodos que declara la interfaz.

Ahora... para que me sirve esto???????????????

veamos este Ejemplo:

interface Volador {

public void volar();
piblic void despegar();
}

class Avion implements Volador {

public void volar() {

System.out.println("el avion vuela");
}

public void despear() {

System.out.println("el avion enciende los motores y despega");

}
}

class Ave implements Volador {

public void volar() {

System.out.println("el ave planea y aletea pocas veces");
}

public void despear() {

System.out.println("el ave aletea y despega ");

}
}

public class Prueba {

public static void main(String a[]) {

Volador ave = new Ave();

Volador avion = new Avion();

ave.volar();
avion.volar();


Volador cualquiera = new Avion();

cualquiera.despegar();

cualquiera = new Ave();

cualquiera.despegar();

}
}


Fijate que usamos una variable del tipo Volador llamada cualquiera.
Lo que nosotros sabemos es que Volador tiene un método llamado despegar y
otro llamado Volar; no me importa que hace ese método, lo que a mi me
interesa es que lo tenga y que yo pueda ejecutarlo. Como la interfaz lo
tiene, la clase que implementa la interfaz también lo tiene, y lo
implemento (lo lleno con código).

así, a una variable del tipo Volador le asigno un objeto del tipo Avión,
es legal ya que Avion es un Volador (lo implementa) y como un volador sabe
volar(no me importa como lo haga) yo ejecuto el método volar() sea un Ave
o un Avión.


Con esto logras una de las máximas de la OO, el Polimorfismo...

Saludos
Luis Cisneros

'sabrina wrote:
En este link
http://64.233.179.104/search?q=cache:U-56e-Dr6WcJ:mami.uclm.es/jbravo/docencia/componentes/Presentaciones_0405/Interfaces.pdf+%22la+clase+KeyAdapter%22+%2B+%22java%22&hl=es

indican que "Una variable de referencia de tipo interfaz sólo tiene
conocimiento de los métodos que hay en la declaración de la interfaz"
y para lo cual dan el siguiente ejemplo :

interface Saludo {void diHola();}
class C1 implements Saludo {public void diHola()
{System.out.println("Hola, Mundo!");}}
class C2 implements Saludo {public void diHola()
{System.out.println("Hello, World!");}}

class Prueba {
public static void main (String [] args)
{Saludo s = new C1();
s.diHola();
C2 cdos = new C2();
s = cdoss.diHola();
}
}
Resultado Hola, Mundo!
Hello, World!

Sinceramente,no entiendo que es lo que quieren demostrar con la clase "
Prueba" de este ejemplo.
¿alguien fuera tan amable de explicarme esto?

Sabrina




MindArs C.A. Luis Miguel Cisneros León
Consultor / Instructor
División de Consultoría en Java™
MindArs C.A.

Av. Francisco de Miranda, Centro Profesional Miranda
Piso 4, Oficina 4-D, Chacao, Caracas - 1060
Distrito Capital - Venezuela

Teléfonos: +58-212-2646581 / 4168586
Celular: +58-414-3015074
E-Mail: <mailto:
Web Site: http://www.mindars.com <http://www.mindars.com>

*Aviso Legal: *
Este mensaje es privado y confidencial, y está dirigido exclusivamente a
su(s) destinatario(s). Si usted ha recibido este mensaje por error, debe
abstenerse de distribuirlo, copiarlo o usarlo en cualquier sentido.
Asimismo, le agradecemos comunicarlo al remitente y borrar el mensaje y
cualquier documento adjunto.
Respuesta Responder a este mensaje
#3 Luis Miguel Cisneros León
21/06/2005 - 20:06 | Informe spam
como dije el polimorfismo es piedra angular de cualquier lenguaje
orientado a objeto, asi que es muuuuy importante dominarlo.

imagina que tienes un Array con 100 cosas que vuelan

Object[] varios = new Object[100];

varios[0] = new Ave();
varios[1] = new Ave();
varios[2] = new Ave();
varios[3] = new Ave();
varios[4] = new Avion();
varios[5] = new Avion();
varios[6] = new Ave();
varios[7] = new Avion();
varios[8] = new Ave();

etc

y tu quieres hacerlos volar, solo eso...


for(int i = 0; i< varios.length; i++) {
if (varios[i] intanceof Ave) {
((Ave)varios[i]).volar();
}
else if(varios[i] intanceof Avion) {
((Avion)varios[i]).volar()
}
else {
System.out.println("esto no vuela");
}

}

veamos como queda con el uso de la interfas volador:


Volador[] voladores= new Volador[100];

voladores[0] = new Ave();
voladores[1] = new Ave();
voladores[2] = new Ave();
voladores[3] = new Ave();
voladores[4] = new Avion();
voladores[5] = new Avion();
voladores[6] = new Ave();
voladores[7] = new Avion();
voladores[8] = new Ave();

etc

y tu quieres hacerlos volar, solo eso...


for(int i = 0; i< voladores.length; i++) {
voladores[i].volar();
}


espero que este ejemplo te ayude a entender el poder el uso de interfaces...

Luis Miguel

'sabrina wrote:

Hola Luis :
Entiendo que todas las clases que implementan una interfaz debe
sobreescribir los metodos vacios de la interfaz para darles la utilidad mas
conveniente. Pero volviendo al ejemplo que me das (esto del polimorfismo me
cuesta entender su utilidad) te expreso lo siguiente:
No veo la diferencia entre crear una clase Avion y otra Ave, en la cual , a
cada una de ellas les ponga los metodos volar() y despegar()
y escribiendo en cada uno de ellos lo necesario segun se trate de Avion o
Ave , de esta forma (observa que no uso Implements):

class Avion {
public void volar() { System.out.println("el avion vuela"); }
public void despegar() {System.out.println("el avion enciende los motores
y despega"); }
}
class Ave {
public void volar() {System.out.println("el ave planea y aletea pocas
veces"); }
public void despegar() {System.out.println("el ave aletea y despega
"); }
}

Luego

public class Prueba {
public static void main(String a[]) {
Ave ave = new Ave();
Avion avion = new Avion();
ave.volar();
avion.volar();
ave.despegar();
avion.despegar();
}
}

Como veras, puedo usar los metodos volar() y despegar() de igual forma, es
decir sin tener que usar ninguna Interfaz, es por ello que no logro entender
cual es la utilidad o ventaja concreta de utilzar Interfaces .
Espero haberme dejado entender en donde esta mi duda con respecto al
polimorfismo y en consecuencia a las interfaces.
Disculpa Luis si estoy abusando de tu tiempo, pero creo que entender estos
puntos es importante para entender Java.

Sabrina,






MindArs C.A. Luis Miguel Cisneros León
Consultor / Instructor
División de Consultoría en Java™
MindArs C.A.

Av. Francisco de Miranda, Centro Profesional Miranda
Piso 4, Oficina 4-D, Chacao, Caracas - 1060
Distrito Capital - Venezuela

Teléfonos: +58-212-2646581 / 4168586
Celular: +58-414-3015074
E-Mail: <mailto:
Web Site: http://www.mindars.com <http://www.mindars.com>

*Aviso Legal: *
Este mensaje es privado y confidencial, y está dirigido exclusivamente a
su(s) destinatario(s). Si usted ha recibido este mensaje por error, debe
abstenerse de distribuirlo, copiarlo o usarlo en cualquier sentido.
Asimismo, le agradecemos comunicarlo al remitente y borrar el mensaje y
cualquier documento adjunto.
Respuesta Responder a este mensaje
#4 sabrina
21/06/2005 - 23:41 | Informe spam
Luis:
Gracias por tu molestia de atender mi duda.Vemos si te entendi bien.
En el ejemplo, estas usando un Array de Interface para crear distintas
"referencias a objetos " que apuntan a distintas clases . Obviamente estas
clases tienen implementadas (implements) la misma Interface. De esta forma
podemos llamar a los MISMOS METODOS de las distintas clases que haran
"funciones distintas" dependiendo de como cada clase haya sobreescrito
dichos metodos.
Entendi bien ?
Sabrina

.
"Luis Miguel Cisneros León" escribió en el mensaje
news:
como dije el polimorfismo es piedra angular de cualquier lenguaje
orientado a objeto, asi que es muuuuy importante dominarlo.

imagina que tienes un Array con 100 cosas que vuelan

Object[] varios = new Object[100];

varios[0] = new Ave();
varios[1] = new Ave();
varios[2] = new Ave();
varios[3] = new Ave();
varios[4] = new Avion();
varios[5] = new Avion();
varios[6] = new Ave();
varios[7] = new Avion();
varios[8] = new Ave();

etc

y tu quieres hacerlos volar, solo eso...


for(int i = 0; i< varios.length; i++) {
if (varios[i] intanceof Ave) {
((Ave)varios[i]).volar();
}
else if(varios[i] intanceof Avion) {
((Avion)varios[i]).volar()
}
else {
System.out.println("esto no vuela");
}

}

veamos como queda con el uso de la interfas volador:


Volador[] voladores= new Volador[100];

voladores[0] = new Ave();
voladores[1] = new Ave();
voladores[2] = new Ave();
voladores[3] = new Ave();
voladores[4] = new Avion();
voladores[5] = new Avion();
voladores[6] = new Ave();
voladores[7] = new Avion();
voladores[8] = new Ave();

etc

y tu quieres hacerlos volar, solo eso...


for(int i = 0; i< voladores.length; i++) {
voladores[i].volar();
}


espero que este ejemplo te ayude a entender el poder el uso de
interfaces...

Luis Miguel

'sabrina wrote:

Hola Luis :
Entiendo que todas las clases que implementan una interfaz debe
sobreescribir los metodos vacios de la interfaz para darles la utilidad
mas conveniente. Pero volviendo al ejemplo que me das (esto del
polimorfismo me cuesta entender su utilidad) te expreso lo siguiente:
No veo la diferencia entre crear una clase Avion y otra Ave, en la cual ,
a cada una de ellas les ponga los metodos volar() y despegar()
y escribiendo en cada uno de ellos lo necesario segun se trate de Avion o
Ave , de esta forma (observa que no uso Implements):

class Avion {
public void volar() { System.out.println("el avion vuela"); }
public void despegar() {System.out.println("el avion enciende los
motores y despega"); }
}
class Ave {
public void volar() {System.out.println("el ave planea y aletea
pocas veces"); }
public void despegar() {System.out.println("el ave aletea y despega
"); }
}

Luego

public class Prueba {
public static void main(String a[]) {
Ave ave = new Ave();
Avion avion = new Avion();
ave.volar();
avion.volar();
ave.despegar();
avion.despegar();
}
}

Como veras, puedo usar los metodos volar() y despegar() de igual forma,
es decir sin tener que usar ninguna Interfaz, es por ello que no logro
entender cual es la utilidad o ventaja concreta de utilzar Interfaces .
Espero haberme dejado entender en donde esta mi duda con respecto al
polimorfismo y en consecuencia a las interfaces.
Disculpa Luis si estoy abusando de tu tiempo, pero creo que entender
estos puntos es importante para entender Java.

Sabrina,






MindArs C.A. Luis Miguel Cisneros León
Consultor / Instructor
División de Consultoría en Java™
MindArs C.A.

Av. Francisco de Miranda, Centro Profesional Miranda
Piso 4, Oficina 4-D, Chacao, Caracas - 1060
Distrito Capital - Venezuela

Teléfonos: +58-212-2646581 / 4168586
Celular: +58-414-3015074
E-Mail: <mailto:
Web Site: http://www.mindars.com <http://www.mindars.com>

*Aviso Legal: *
Este mensaje es privado y confidencial, y está dirigido exclusivamente a
su(s) destinatario(s). Si usted ha recibido este mensaje por error, debe
abstenerse de distribuirlo, copiarlo o usarlo en cualquier sentido.
Asimismo, le agradecemos comunicarlo al remitente y borrar el mensaje y
cualquier documento adjunto.
Respuesta Responder a este mensaje
#5 Luis Miguel Cisneros León
22/06/2005 - 13:43 | Informe spam
Muy Bien :-).

Imaginate un Empleado y un Supervisor. Ellos pueden heredar de una clase
abstracta llamada humano (métodos como camina, comer, respirar, etc).
pero también pueden implementar una interfaz llamada Trabajador, que
tiene el método trabajar (imaginemos un robot que haga lo mismo, osea,
también trabaje). Ahora, no importa lo que tengas, imaginate una
colección con 1000 trabajadores, no sabes de que tipo, lo que te
importan es que trabajen

Ves el poder?

Saludos
Luis Cisneros

'sabrina wrote:
Luis:
Gracias por tu molestia de atender mi duda.Vemos si te entendi bien.
En el ejemplo, estas usando un Array de Interface para crear distintas
"referencias a objetos " que apuntan a distintas clases . Obviamente estas
clases tienen implementadas (implements) la misma Interface. De esta forma
podemos llamar a los MISMOS METODOS de las distintas clases que haran
"funciones distintas" dependiendo de como cada clase haya sobreescrito
dichos metodos.
Entendi bien ?
Sabrina

.
"Luis Miguel Cisneros León" escribió en el mensaje
news:

como dije el polimorfismo es piedra angular de cualquier lenguaje
orientado a objeto, asi que es muuuuy importante dominarlo.

imagina que tienes un Array con 100 cosas que vuelan

Object[] varios = new Object[100];

varios[0] = new Ave();
varios[1] = new Ave();
varios[2] = new Ave();
varios[3] = new Ave();
varios[4] = new Avion();
varios[5] = new Avion();
varios[6] = new Ave();
varios[7] = new Avion();
varios[8] = new Ave();

etc

y tu quieres hacerlos volar, solo eso...


for(int i = 0; i< varios.length; i++) {
if (varios[i] intanceof Ave) {
((Ave)varios[i]).volar();
}
else if(varios[i] intanceof Avion) {
((Avion)varios[i]).volar()
}
else {
System.out.println("esto no vuela");
}

}

veamos como queda con el uso de la interfas volador:


Volador[] voladores= new Volador[100];

voladores[0] = new Ave();
voladores[1] = new Ave();
voladores[2] = new Ave();
voladores[3] = new Ave();
voladores[4] = new Avion();
voladores[5] = new Avion();
voladores[6] = new Ave();
voladores[7] = new Avion();
voladores[8] = new Ave();

etc

y tu quieres hacerlos volar, solo eso...


for(int i = 0; i< voladores.length; i++) {
voladores[i].volar();
}


espero que este ejemplo te ayude a entender el poder el uso de
interfaces...

Luis Miguel

'sabrina wrote:


Hola Luis :
Entiendo que todas las clases que implementan una interfaz debe
sobreescribir los metodos vacios de la interfaz para darles la utilidad
mas conveniente. Pero volviendo al ejemplo que me das (esto del
polimorfismo me cuesta entender su utilidad) te expreso lo siguiente:
No veo la diferencia entre crear una clase Avion y otra Ave, en la cual ,
a cada una de ellas les ponga los metodos volar() y despegar()
y escribiendo en cada uno de ellos lo necesario segun se trate de Avion o
Ave , de esta forma (observa que no uso Implements):

class Avion {
public void volar() { System.out.println("el avion vuela"); }
public void despegar() {System.out.println("el avion enciende los
motores y despega"); }
}
class Ave {
public void volar() {System.out.println("el ave planea y aletea
pocas veces"); }
public void despegar() {System.out.println("el ave aletea y despega
"); }
}

Luego

public class Prueba {
public static void main(String a[]) {
Ave ave = new Ave();
Avion avion = new Avion();
ave.volar();
avion.volar();
ave.despegar();
avion.despegar();
}
}

Como veras, puedo usar los metodos volar() y despegar() de igual forma,
es decir sin tener que usar ninguna Interfaz, es por ello que no logro
entender cual es la utilidad o ventaja concreta de utilzar Interfaces .
Espero haberme dejado entender en donde esta mi duda con respecto al
polimorfismo y en consecuencia a las interfaces.
Disculpa Luis si estoy abusando de tu tiempo, pero creo que entender
estos puntos es importante para entender Java.

Sabrina,






MindArs C.A. Luis Miguel Cisneros León
Consultor / Instructor
División de Consultoría en Java™
MindArs C.A.

Av. Francisco de Miranda, Centro Profesional Miranda
Piso 4, Oficina 4-D, Chacao, Caracas - 1060
Distrito Capital - Venezuela

Teléfonos: +58-212-2646581 / 4168586
Celular: +58-414-3015074
E-Mail: <mailto:
Web Site: http://www.mindars.com <http://www.mindars.com>

*Aviso Legal: *
Este mensaje es privado y confidencial, y está dirigido exclusivamente a
su(s) destinatario(s). Si usted ha recibido este mensaje por error, debe
abstenerse de distribuirlo, copiarlo o usarlo en cualquier sentido.
Asimismo, le agradecemos comunicarlo al remitente y borrar el mensaje y
cualquier documento adjunto.









MindArs C.A. Luis Miguel Cisneros León
Consultor / Instructor
División de Consultoría en Java™
MindArs C.A.

Av. Francisco de Miranda, Centro Profesional Miranda
Piso 4, Oficina 4-D, Chacao, Caracas - 1060
Distrito Capital - Venezuela

Teléfonos: +58-212-2646581 / 4168586
Celular: +58-414-3015074
E-Mail: <mailto:
Web Site: http://www.mindars.com <http://www.mindars.com>

*Aviso Legal: *
Este mensaje es privado y confidencial, y está dirigido exclusivamente a
su(s) destinatario(s). Si usted ha recibido este mensaje por error, debe
abstenerse de distribuirlo, copiarlo o usarlo en cualquier sentido.
Asimismo, le agradecemos comunicarlo al remitente y borrar el mensaje y
cualquier documento adjunto.
Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente Respuesta Tengo una respuesta
Search Busqueda sugerida