Foros aprenderaprogramar.com
Aprender a programar => Aprender a programar desde cero => Mensaje iniciado por: Jorge lopez en 16 de Septiembre 2014, 21:36
-
Responde a las siguientes preguntas:
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.
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.
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();
}
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();
}
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!
-
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
-
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,
-
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!
-
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