elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Trabajando con las ramas de git (tercera parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  Java
| | | |-+  [Duda] Interfaces (objetos).
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: [Duda] Interfaces (objetos).  (Leído 2,414 veces)
The Swash

Desconectado Desconectado

Mensajes: 194


Programmer


Ver Perfil WWW
[Duda] Interfaces (objetos).
« en: 8 Septiembre 2012, 21:19 pm »

Buenas tardes,

Tengo una duda muy puntal respecto a las interfaces en java, las interfaces vienen siendo abstracción pura. Según mi concepto obligan a implementar métodos definidos en esta a clases que implementen la interfaz.

Mi duda surge en:
¿Si tengo una clase que implementa una interfaz, pero en dicha clase creo un método que no está definido en la interfaz funcionaría? o me veo límitado a los métodos de la interfaz?.

Con un ejemplo real:
Interfaz:
Código
  1. public interface IList<E> {
  2. public void add(E target);
  3. public boolean isEmpty();
  4. public boolean isFull();
  5. public boolean contains (E target);
  6. public void set (int index, E target);
  7. public E get(int index);
  8. public E remove(int index);
  9. public boolean remove (E target);
  10. public void print();
  11. }

Clase que implementa la interfaz:
Código
  1. public class CList<E> implements IList<E> {
  2.  
  3. private E[] data;
  4. private int size;
  5.  
  6. public void add(int index, E target){
  7. if ((index > 0) && (index < size)){
  8. if(isFull())
  9. stretch();
  10. for (int i = index; i <= size; i++)
  11. data[i+1]= data[i];
  12. data[index]= target;
  13. size++;
  14. }
  15. }
  16.  
  17. public boolean isEmpty(){
  18. return size==0;
  19. }
  20.  
  21. public boolean isFull(){
  22. return data.length == size;
  23. }
  24.  
  25. private void stretch(){
  26. E[]temp = (E[]) new Object[data.length*2];
  27. for (int  i=0; i<data.length; i++)
  28. temp[i]= data[i];
  29. data=temp;
  30. }
  31.  
  32. public void add(E target){
  33. if(isFull())
  34. stretch();
  35. data [size]= target;
  36. size++;
  37. }
  38.  
  39. public E get(int index){
  40. if (index >0 && index< size)
  41. return data[index];
  42. return null;
  43. }
  44.  
  45. public void set(int index, E target){
  46. if((index >= 0)&& (index< size))
  47. data[index]= target;
  48. }
  49.  
  50. public CList(){
  51. data = (E[]) new Object[1];
  52. size=0;
  53. }
  54.  
  55. public boolean contains (E target){
  56. for(int i = 0; i < size; i++){
  57. if(data[i].equals(target))
  58. return true;
  59. }
  60. return false;
  61. }
  62.  
  63. public E remove(int index){
  64. if (index>=0 && index < size){
  65. E element= data[index];
  66. for (int i= index; i<size-1; i++)
  67. data[i]=data[i+1];
  68. size--;
  69. return element;
  70. }
  71. return null;
  72. }
  73.  
  74. public boolean remove (E target){
  75. for (int i=0; i<size; i++){
  76. if (data[i].equals(target)){
  77. E element= remove(i);
  78. size--;
  79. return true;
  80. }
  81. }
  82. return false;
  83. }
  84.  
  85. public void print(){
  86. if(! isEmpty()){
  87. for (int i= 0; i<size; i++)
  88. System.out.print(data[i] + " ");
  89. }
  90. }
  91.  
  92. public boolean removeAll(E target){
  93. boolean resultado = true;
  94. int cont = 0;
  95. if (!isEmpty()){
  96. while(resultado){
  97. cont++;
  98. resultado = remove(target);
  99. }
  100. if (cont > 1)
  101. return true;
  102. }
  103. return false;
  104. }
  105.  
  106. public static void main(String[] args ){
  107. IList<String> lista=new CList<String>();
  108. lista.print();
  109. lista.add("B");
  110. lista.add("F");
  111. lista.add("A");
  112. lista.add("Z");
  113. lista.add("W");
  114. lista.add("P");
  115. lista.add("R");
  116. lista.add("A");
  117. lista.add("S");
  118. lista.add("A");
  119. lista.add("P");
  120. lista.print();
  121. System.out.println(lista.removeAll("A"));
  122. lista.print();
  123. }
  124. }

Claramente se puede notar al compilar un error por no encontrar el símbolo de la función "removeAll". Si declaro el método en la interfaz funciona sin ningún pero, entonces sólo quiero asegurarme de que la interfaz me limita los métodos que puede tener mi clase como "públicos".

Ahora mismo comprobé que si instancio la clase utilizando su mismo tipo de dato así:

Código
  1. CList<String> lista = new CList<String>;

El problema desaparece y todo recae en crear un objeto del tipo Interfaz e instanciarlo con una clase que contiene métodos que la interfaz no contiene.

¿Estoy en lo correcto?
¿Por qué el error de la primera forma de instanciar la clase?

De poder entrar en detalle lo agradecería.

Muchas gracias,
Iván Portilla.


En línea

sapito169


Desconectado Desconectado

Mensajes: 628



Ver Perfil
Re: [Duda] Interfaces (objetos).
« Respuesta #1 en: 17 Septiembre 2012, 06:06 am »

mira es raro de que te intereses y te descuenta de esos detalles se nota que tienes madera para ser arquitecto por que la mayoría ni le interesa y/o ni lo entiende y/o ni sabe que existe este tipos de cosas  ;-)

Citar
¿Si tengo una clase que implementa una interfaz, pero en dicha clase creo un método que no está definido en la interfaz funcionaría? o me veo límitado a los métodos de la interfaz?.

mira la respuesta es simple clara y sin anbiguedades ni matieses si es posible

el segundo punto es que esta pregunta no es de opinión es un echo objetivo de la realidad y por lo tanto es totalmente comprobable ademas solo hay dos respuestas
las cuales son es posible y no es posible.En esos casos no preguntes experimenta descubre lo por tu cuenta recuerda que comprobarlo es muy fácil y esta a tu alcance

por que preguntas si tu mismo lo as demostrado?





« Última modificación: 17 Septiembre 2012, 06:14 am por sapito169 » En línea

ChavalChavito

Desconectado Desconectado

Mensajes: 43


Y ahora que pasa...


Ver Perfil
Re: [Duda] Interfaces (objetos).
« Respuesta #2 en: 17 Septiembre 2012, 17:33 pm »

Un termino que me ayudo mucho a entender el concepto es q la interfaz es como un contrato entre la clase y el mundo exterior..
En la interfaz se definen una serie de metodos, los cuales debe de ser reescritos en TODA CLASE QUE IMPLEMENTE DICHA INTERFAZ.
El compilador cdo se ejecuta se encarga d controlar q todos los metodos sean llamados desd la clase q implementa la interfaz....

Código:
Interfaz Ejemplo = new Clase<String>;
* Solo los metodos de la interfaz
Código:
Clase Ejemplo = new Clase<String>;
* Todos los metodos d la clase
En línea

The Swash

Desconectado Desconectado

Mensajes: 194


Programmer


Ver Perfil WWW
Re: [Duda] Interfaces (objetos).
« Respuesta #3 en: 19 Septiembre 2012, 22:41 pm »

Hola,

Muchas gracias por vuestras amables y contundentes respuestas.

Un saludo,
Iván Portilla.
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Duda: ¿Cómo puedo aprovechar dos interfaces de red?
GNU/Linux
xavierote 2 3,533 Último mensaje 13 Julio 2011, 23:40 pm
por xavierote
MOVIDO: Duda: ¿Cómo puedo aprovechar dos interfaces de red?
Wireless en Linux
ChimoC 0 1,793 Último mensaje 18 Julio 2011, 15:51 pm
por ChimoC
duda con objetos en java...
Foro Libre
artis 2 2,344 Último mensaje 2 Mayo 2012, 03:36 am
por exel
[Solucionado]Pequeña duda ip estatica a dhcp, mala confi /etc/network/interfaces
GNU/Linux
Anonymous250 3 3,056 Último mensaje 8 Octubre 2012, 05:39 am
por Anonymous250
Duda configurando mis interfaces !! debian !!
Redes
TrashAmbishion 4 2,752 Último mensaje 13 Septiembre 2016, 08:51 am
por warcry.
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines