Foros aprenderaprogramar.com

Aprender a programar => Aprender a programar desde cero => Mensaje iniciado por: Jorge lopez en 16 de Septiembre 2014, 21:36

Título: Ejercicio CU00696B# concepto interface java, herencia multiple. Métodos
Publicado por: Jorge lopez en 16 de Septiembre 2014, 21:36
 Responde a las siguientes preguntas:

Citar
a) ¿Una clase puede heredar de dos clases en Java?

No, una clase puede heredar solo de una super clase mediante la sentencia:
public class ClassName extends SuperClassName, por otra parte, una clase puede heredar de una super clase e implementar una o varias interface.


Citar
b) ¿Una interface Java puede tener métodos que incluyan una sentencia while? ¿Una interface Java puede tener métodos que incluyan una sentencia System.out.println?

No, tanto una sentencia while, como una sentencia System.out.println han de ser declaradas en el cuerpo de un metodo, hemos de tener en cuenta que todo metodo declarado en una interface a de ser abstracto, y que un metodo abstracto carece de cuerpo.


Citar
c1) ¿Un objeto Java puede ser del tipo definido por una interface?

Si, un ejemplo seria:

public interface Interface{}
public class Class1 implements Interface{}

public static void main(String []args)
{
  Interface obj1 = new Class1();
}


Citar
c2) ¿Un objeto Java puede ser al mismo tiempo del tipo definido por una interface y del tipo definido por una clase que no implementa la interface?

Sí, un ejemplo seria:

public interface Interface{}
public class Class1 implements Interface{}
public class Class2 extends Class1{}

public static void main(String []args)
{
  Interface obj1 = new Class1();
  Interface obj2 = new Class2();
}


Citar
c3) ¿Un objeto Java puede ser al mismo tiempo del tipo definido por una interface y del tipo definido por una clase que implementa la interface

Sí, un ejemplo seria:

public interface Interface{}
public class Class1 implements Interface{}
public class Class2 extends Class1 implements Interface{}

public static void main(String []args)
{
  Interface obj1 = new Class1();
  Interface obj2 = new Class2();
}

Saludos!
Título: Re:Ejercicio! entrega CU00696B concepto interface java, herencia multiple.
Publicado por: toni_apr en 17 de Septiembre 2014, 21:30
Hola Sniper
Tu ejercicio es correcto al 100%
Yo aquí tuve un error en la respuesta c2
Pero con unas indicaciones y haciéndome pensar vi la diferencia

Saludos
Título: Re:Ejercicio! entrega CU00696B concepto interface java, herencia multiple.
Publicado por: Mario R. Rancel en 18 de Septiembre 2014, 08:41
Hola, la pregunta c2 tiene "su complejidad". La respuesta de sniper la veo correcta, pero quizás debería acompañarse de un comentario en el sentido de que no se puede responder "sí, en cualquier caso", sino "sí, pero sólo en el caso de que la clase que no implemente la interface directamente adquiera el tipo definido por la interface mediante herencia a través de una clase que sí implementa la interface". Dicho así, puede parecer un trabalenguas, quizás lo más fácil para entenderlo es el ejemplo en código que ha puesto sniper. Saludos,
Título: Re:Ejercicio! entrega CU00696B* concepto interface java, herencia multiple.
Publicado por: Jorge lopez en 19 de Septiembre 2014, 02:49
 Me parece que comprendí tu "trabalenguas" Mario  ;D

Al declarar:
public interface Interface{}
public class Class1 implements Interface{}
public class Class2 extends Class1{}

Es posible el compilado de:
public static void main(String []args)
{
  Interface obj1 = new Class1();
  Interface obj2 = new Class2();
}

Esto porque de manera indirecta mediante la herencia de Class1 en Class2, la Class2 adquiere (hereda) el tipo definido por la Interface, por tanto si se intenta compilar:

public interface Interface{}
public class Class1{}
public class Class2 extends Class1{}

public static void main(String []args)
{
  Class1 obj1 = new Class1();
  Interface obj2 = new Class2();
}

Obtendriamos un error de compilacion, porque Class2 ni implementa la Interface directamente, ni hereda de una clase que implemente la Interface, por tanto no hay polimorfismo alguno que haga posible el compilado de:

public static void main(String []args)
{
  Class1 obj1 = new Class1();
  Interface obj2 = new Class2();
}
Espero estar en lo correcto

Saludos!
Título: Re:Ejercicio! entrega CU00696B* concepto interface java, herencia multiple.
Publicado por: Mario R. Rancel en 20 de Septiembre 2014, 12:38
Totalmente en lo correcto y perfectamente explicado sniper. Aquí has dicho una cuestión que es importante y que puede ayudar a quienes tengan problemas para comprender la herencia y el polimorfismo:

"Esto porque de manera indirecta mediante la herencia de Class1 en Class2, la Class2 adquiere (hereda) el tipo definido por la Interface"

Trabalenguas decodificado  ;D