Impugnar pregunta 39
- pajaroloco
- Usuario registrado
- Mensajes: 103
- Registrado: 19 Dic 2013, 17:57
- Agradecido: 0
- Agradecimiento recibido: 0
Impugnar pregunta 39
39. En el contexto del uso de interfaces en el lenguaje de programación JAVA:
a. Una clase puede heredar de múltiples interfaces.
b. Todas las clases de JAVA heredan directa o indirectamente de java.lang.Interface.
c. Los constructores de un interfaz deben ser abstractos.
d. Para que una clase herede de un interfaz se utiliza la palabra clave “extends”.
Respuesta A.
Hay muchas dudas sobre "heredar" versus "implementar"
a. Una clase puede heredar de múltiples interfaces.
b. Todas las clases de JAVA heredan directa o indirectamente de java.lang.Interface.
c. Los constructores de un interfaz deben ser abstractos.
d. Para que una clase herede de un interfaz se utiliza la palabra clave “extends”.
Respuesta A.
Hay muchas dudas sobre "heredar" versus "implementar"
- al83
- PreparaTIC27
- Mensajes: 245
- Registrado: 18 Nov 2017, 10:31
- Agradecido: 0
- Agradecimiento recibido: 0
Re: Impugnar pregunta 39
Yo esta la tengo mal, pero lamentablemente creo que no tiene recorrido la impugnación.
La propia documentación oficial de Java habla de herencia al referirse a la implementación de interfaces:
Lo correcto sería hablar de "extends" versus "implements".
Tanto uno como otro son dos tipos de herencia.
La propia documentación oficial de Java habla de herencia al referirse a la implementación de interfaces:
Referencia: https://docs.oracle.com/javase/tutorial ... tance.htmlThe Java programming language supports multiple inheritance of type, which is the ability of a class to implement more than one interface
Lo correcto sería hablar de "extends" versus "implements".
Tanto uno como otro son dos tipos de herencia.
Última edición por al83 el 18 Jun 2019, 09:39, editado 1 vez en total.
-
- PreparaTIC27
- Mensajes: 27
- Registrado: 11 Jul 2018, 11:19
- Agradecido: 0
- Agradecimiento recibido: 1 vez
Re: Impugnar pregunta 39
Justo estaba leyendo lo mismo que tu al83
Pero aún así yo esta la veo impugnable, en mi opinión.
Si no utilizas claramente la diferencia entre implementar y heredar no puedes aclarar que es lo que está ocurriendo.
Es decir una interfaz (que es una clase Java) solo puede heredar de otra interfaz (extends) mientras que una clase Java puede implementar (implements) varias interfaces.
Si a todo lo llamamos heredar no es posible saber de que estamos hablando.
Pero aún así yo esta la veo impugnable, en mi opinión.
Si no utilizas claramente la diferencia entre implementar y heredar no puedes aclarar que es lo que está ocurriendo.
Es decir una interfaz (que es una clase Java) solo puede heredar de otra interfaz (extends) mientras que una clase Java puede implementar (implements) varias interfaces.
Si a todo lo llamamos heredar no es posible saber de que estamos hablando.
- al83
- PreparaTIC27
- Mensajes: 245
- Registrado: 18 Nov 2017, 10:31
- Agradecido: 0
- Agradecimiento recibido: 0
Re: Impugnar pregunta 39
Creo que el problema está en cómo usamos los términos.
Oficialmente, lo correcto según estoy leyendo es hablar de extender e implementar (no heredar e implementar). No sé si me explico. Si decimos heredar, es un término genérico. Para concretar, hay que especificar si estamos extendiendo o implementando.
- javierbds
- Usuario registrado
- Mensajes: 125
- Registrado: 14 Sep 2017, 10:57
- Agradecido: 1 vez
- Agradecimiento recibido: 0
Re: Impugnar pregunta 39
Es consistente: la opcion d te aclara que quiere decir cuando dice heredar de un(a) interface, esto es implements. (herencia de interfaz vs herencia de implementacion). Como indicais la cosa se lia por (el significado y uso de) las palabras reservadas de Java.
Una clase abstracta puede "heredar" una interfaz sin implementarla (como curiosidad o por liarlo mas ...).
Yo le tuve que dar un par de vueltas en el examen y no digo que no se pueda impugnar pero tambien es defendible.
Una clase abstracta puede "heredar" una interfaz sin implementarla (como curiosidad o por liarlo mas ...).
Código: Seleccionar todo
interface SomeInterface {
void foo();
int bar();
}
public abstract class YourClass implements SomeInterface {
// no mention of foo() and bar() here
}
Última edición por javierbds el 18 Jun 2019, 10:49, editado 1 vez en total.
Los ingenieros son también activistas sociales que diseñan sociedades e instituciones que se ajustan a sus máquinas [Callon]
-
- Usuario registrado
- Mensajes: 16
- Registrado: 07 Oct 2015, 23:09
- Agradecido: 0
- Agradecimiento recibido: 0
Re: Impugnar pregunta 39
"...Classes and interfaces support multiple inheritance from interfaces. A class that implements one or more interfaces may inherit instancemethods from both its superclass and its superinterfaces..."
https://docs.oracle.com/javase/specs/jl ... ml#jls-1.1
https://docs.oracle.com/javase/specs/jl ... ml#jls-1.1
-
- PreparaTIC27
- Mensajes: 27
- Registrado: 11 Jul 2018, 11:19
- Agradecido: 0
- Agradecimiento recibido: 1 vez
Re: Impugnar pregunta 39
Dándole otra vuelta a la pregunta
Opción D:
d. Para que una clase herede de un interfaz se utiliza la palabra clave “extends”.
Una interfaz es una clase.
Una interfaz para heredar de otra utiliza la palabra clave extends.
Luego es cierta esta opción.
¿Que pensáis?
Opción D:
d. Para que una clase herede de un interfaz se utiliza la palabra clave “extends”.
Una interfaz es una clase.
Una interfaz para heredar de otra utiliza la palabra clave extends.
Luego es cierta esta opción.
¿Que pensáis?
-
- PreparaTIC27
- Mensajes: 27
- Registrado: 11 Jul 2018, 11:19
- Agradecido: 0
- Agradecimiento recibido: 1 vez
Re: Impugnar pregunta 39
Vale me autocorrijo, una interfaz aunque pueda parecer no se considera una clase.
DavidC escribió: ↑18 Jun 2019, 10:53Dándole otra vuelta a la pregunta
Opción D:
d. Para que una clase herede de un interfaz se utiliza la palabra clave “extends”.
Una interfaz es una clase.
Una interfaz para heredar de otra utiliza la palabra clave extends.
Luego es cierta esta opción.
¿Que pensáis?
- javierbds
- Usuario registrado
- Mensajes: 125
- Registrado: 14 Sep 2017, 10:57
- Agradecido: 1 vez
- Agradecimiento recibido: 0
Re: Impugnar pregunta 39
Es que si entras ahi se puede liar mucho ademas, hoy en dia las interfaces tienen metodos implementados por defecto, etc ... Lo que si se seguira cumpliendo siempre es que el mecanismo con el que java permite herencia multiple es mediante interfaces.
Los ingenieros son también activistas sociales que diseñan sociedades e instituciones que se ajustan a sus máquinas [Callon]
-
- Usuario registrado
- Mensajes: 49
- Registrado: 02 Jun 2018, 23:29
- Agradecido: 0
- Agradecimiento recibido: 0
Re: Impugnar pregunta 39
al83 escribió: ↑18 Jun 2019, 09:36Yo esta la tengo mal, pero lamentablemente creo que no tiene recorrido la impugnación.
La propia documentación oficial de Java habla de herencia al referirse a la implementación de interfaces:
Referencia: https://docs.oracle.com/javase/tutorial ... tance.htmlThe Java programming language supports multiple inheritance of type, which is the ability of a class to implement more than one interface
Lo correcto sería hablar de "extends" versus "implements".
Tanto uno como otro son dos tipos de herencia.
Yendo a la definición que expones, en la misma frase se hace mención a herencia e implementación. No hay que confundir que para simular una herencia múltiple en Java haya que implementar varias interfaces, con que una clase herede de una interfaz. Como dice @DavidC es necesario distinguir de alguna forma cuando se está implementando de cuando se está heredando.
Yo la veo impugnable.
Saludos!
- al83
- PreparaTIC27
- Mensajes: 245
- Registrado: 18 Nov 2017, 10:31
- Agradecido: 0
- Agradecimiento recibido: 0
Re: Impugnar pregunta 39
Según la documentación de Java, implementar una interfaz es una forma de herencia. Hay dos formas básicas de herencia:_0p0s1t0r_ escribió: ↑18 Jun 2019, 20:21Como dice @DavidC es necesario distinguir de alguna forma cuando se está implementando de cuando se está heredando.
- extender (extends)
- implementar (implements)
Por lo tanto no es que haya que diferenciar cuando se está implementando de cuando se está heredando. Decir eso no es del todo correcto. Lo correcto es diferenciar de cuándo se está implementando de cuándo se está extendiendo. Ambas cosas son formas de herencia.
Claro, porque precisamente esa definición viene a decir que la implementación es una forma de herencia, lo que confirma que la respuesta (a) es válida._0p0s1t0r_ escribió: ↑18 Jun 2019, 20:21Yendo a la definición que expones, en la misma frase se hace mención a herencia e implementación.
-
- Usuario registrado
- Mensajes: 49
- Registrado: 02 Jun 2018, 23:29
- Agradecido: 0
- Agradecimiento recibido: 0
Re: Impugnar pregunta 39
Hola,
No obstante, por eso que comentas que ambas cosas (implementación y extensión) son una forma de herencia, deberían haberlo diferenciado en la respuesta. Yo no puedo utilizar un "extends" de dos clases o interfaces, pero si un "implements" por lo que si alguien me habla de herencia en estos términos no sé si se referiede al "extends" o al "implements" y no puedo determinar si se está extendiendo o implementado.
Veo que hay quien dice que se puede hacer un extend múltiple si quien lo hace es una interfaz, pero no se consideraría una clase... https://www.tutorialspoint.com/java/java_interfaces.htm
Estoy de acuerdo con esto, perdona la mezcla de términos.
No obstante, por eso que comentas que ambas cosas (implementación y extensión) son una forma de herencia, deberían haberlo diferenciado en la respuesta. Yo no puedo utilizar un "extends" de dos clases o interfaces, pero si un "implements" por lo que si alguien me habla de herencia en estos términos no sé si se referiede al "extends" o al "implements" y no puedo determinar si se está extendiendo o implementado.
Veo que hay quien dice que se puede hacer un extend múltiple si quien lo hace es una interfaz, pero no se consideraría una clase... https://www.tutorialspoint.com/java/java_interfaces.htm
Saludos.A Java class can only extend one parent class. Multiple inheritance is not allowed. Interfaces are not classes, however, and an interface can extend more than one parent interface.
-
- Usuario registrado
- Mensajes: 3
- Registrado: 19 Jun 2019, 11:50
- Agradecido: 0
- Agradecimiento recibido: 0
Re: Impugnar pregunta 39
Yo por si acaso, he impugnado con el siguiente texto, por si alguien se suma. Creo efectivamente que se les ha colado la palabra heredar en lugar de implementar. Otra cosa es que dé la casualidad que haya un concepto "Inheritance of Impementation", que de forma indirecta a través de la implementación y sólo en casos de métodos estáticos en las interfaces, puedan usar para argumentar su respuesta, aunque sinceramente, creo que con esto han premiado más a los que no saben mucho de java y creen que hay herencia multiple como en c++ que a los que realmente saben java. Algo que se aleja de los objetivos de la prueba.
Copio el texto por si alguien lo quiere usar como base para su propia solicitud de impugnación:
- Cuerpo del ejercicio al que se refiere la alegación:
XXVI PRUEBAS SELECTIVAS PARA EL INGRESO EN EL CUERPO SUPERIOR DE SISTEMAS Y TECNOLOGÍAS DE LA INFORMACIÓN DE LA ADMINISTRACIÓN DEL ESTADO
- Forma de Acceso (ingreso libre o promoción interna):
LIBRE
- Primera Parte o Segunda Parte:
PRIMERA PARTE
- Número de la pregunta:
PREGUNTA 39
- Motivo de la alegación y su fundamento:
Considero que la respuesta que se ha dado como válida es ambigua al hablar de "Una clase puede heredar de múltiples interfaces." El texto que sería más claro para comprobar los conocimientos sobre la materia de los opositores sería "Una clase puede implementar múltiples interfaces."
De acuerdo con los objetivos que se persiguen según el Anexo I 1.1 de las bases para el proceso selectivo para ingreso, por el sistema general de acceso libre y promoción interna, en el Cuerpo Superior de Sistemas y Tecnologías de la Información de la Administración del Estado, "Este ejercicio tiene por finalidad medir la amplitud y profundidad de los conocimientos del aspirante sobre las materias del temario, la capacidad de vincular el conocimiento técnico al marco normativo y a la organización administrativa, así como valorar las adecuadas capacidades de razonamiento".
En este caso, considero que la respuesta que se ha dado como válida, se aleja del objetivo de "medir la amplitud y profundidad de los conocimientos" ya que en la literatura sobre java siempre se habla de la imposibilidad de la herencia múltiple de clases. La herencia multiple, sólo está contemplada en el caso de interfaces.
Por otro lado el uso de la palabra heredar, para referirse a la relación entre clases e interfaces es suficientemente confusa como para invalidar esta respuesta.
Si por otro lado, la pregunta buscaba comprobar el conocimiento del opositor sobre el concepto de Inheritance of implementation, considero que la pregunta debería haberse formulado de una manera menos ambigua, ya que en este caso, la herencia de múltiples interfaces se realiza de forma indirecta a través de la implementación de interfaces que a su vez extienden otras interfaces y sólo en el caso de métodos estáticos. Creo que el objetivo de la pregunta no era valorar el conocimiento del opositor sobre este concepto, si no sobre los conceptos más generales sobre herencia múltiple y por ello la respuesta no se encuentra correctamente formulada.
Copio el texto por si alguien lo quiere usar como base para su propia solicitud de impugnación:
- Cuerpo del ejercicio al que se refiere la alegación:
XXVI PRUEBAS SELECTIVAS PARA EL INGRESO EN EL CUERPO SUPERIOR DE SISTEMAS Y TECNOLOGÍAS DE LA INFORMACIÓN DE LA ADMINISTRACIÓN DEL ESTADO
- Forma de Acceso (ingreso libre o promoción interna):
LIBRE
- Primera Parte o Segunda Parte:
PRIMERA PARTE
- Número de la pregunta:
PREGUNTA 39
- Motivo de la alegación y su fundamento:
Considero que la respuesta que se ha dado como válida es ambigua al hablar de "Una clase puede heredar de múltiples interfaces." El texto que sería más claro para comprobar los conocimientos sobre la materia de los opositores sería "Una clase puede implementar múltiples interfaces."
De acuerdo con los objetivos que se persiguen según el Anexo I 1.1 de las bases para el proceso selectivo para ingreso, por el sistema general de acceso libre y promoción interna, en el Cuerpo Superior de Sistemas y Tecnologías de la Información de la Administración del Estado, "Este ejercicio tiene por finalidad medir la amplitud y profundidad de los conocimientos del aspirante sobre las materias del temario, la capacidad de vincular el conocimiento técnico al marco normativo y a la organización administrativa, así como valorar las adecuadas capacidades de razonamiento".
En este caso, considero que la respuesta que se ha dado como válida, se aleja del objetivo de "medir la amplitud y profundidad de los conocimientos" ya que en la literatura sobre java siempre se habla de la imposibilidad de la herencia múltiple de clases. La herencia multiple, sólo está contemplada en el caso de interfaces.
Por otro lado el uso de la palabra heredar, para referirse a la relación entre clases e interfaces es suficientemente confusa como para invalidar esta respuesta.
Si por otro lado, la pregunta buscaba comprobar el conocimiento del opositor sobre el concepto de Inheritance of implementation, considero que la pregunta debería haberse formulado de una manera menos ambigua, ya que en este caso, la herencia de múltiples interfaces se realiza de forma indirecta a través de la implementación de interfaces que a su vez extienden otras interfaces y sólo en el caso de métodos estáticos. Creo que el objetivo de la pregunta no era valorar el conocimiento del opositor sobre este concepto, si no sobre los conceptos más generales sobre herencia múltiple y por ello la respuesta no se encuentra correctamente formulada.
- al83
- PreparaTIC27
- Mensajes: 245
- Registrado: 18 Nov 2017, 10:31
- Agradecido: 0
- Agradecimiento recibido: 0
Re: Impugnar pregunta 39
Copio y pego una frase literal de que puede arrojar algo de luz al tema. Esta extraída de la especificación oficial del lenguaje Java, una fuente bastante fiable en este aspecto...
Como se ve en la frase, se utiliza el término heredar para hablar de que una clase hereda de sus super-interfaces directas. Creo que en base a esto es difícil argumentar que la frase de la opción (a) "una clase puede heredar de múltiples interfaces" es incorrecta o ambigua; ya que la propia especificación de Java utiliza los mismos términos.
Referencia: https://docs.oracle.com/javase/specs/jl ... #jls-8.4.8A class C inherits from its direct superclass and direct superinterfaces all abstract and default methods...
Como se ve en la frase, se utiliza el término heredar para hablar de que una clase hereda de sus super-interfaces directas. Creo que en base a esto es difícil argumentar que la frase de la opción (a) "una clase puede heredar de múltiples interfaces" es incorrecta o ambigua; ya que la propia especificación de Java utiliza los mismos términos.
-
- Usuario registrado
- Mensajes: 49
- Registrado: 02 Jun 2018, 23:29
- Agradecido: 0
- Agradecimiento recibido: 0
Re: Impugnar pregunta 39
Hola,
La verdad es que esta pregunta es un poco compleja, pero si vamos a la URL https://docs.oracle.com/javase/tutorial ... tance.html podemos ver qué define Oracle como herencia, y que para conseguirla se utiliza la palabra extends. De ahí se puede hacer la diferenciación, ya que extends no permite la referncia a múltiples clases/interfaces.
Adicionalmente, Oracle hace referencia a veces a la extensión de una interfaz como si fuese la extensión de una clase, cosa que no es cierta, porque hace la implementación y porque extends no funciona si pones una interfaz detrás.
Saludos.
La verdad es que esta pregunta es un poco compleja, pero si vamos a la URL https://docs.oracle.com/javase/tutorial ... tance.html podemos ver qué define Oracle como herencia, y que para conseguirla se utiliza la palabra extends. De ahí se puede hacer la diferenciación, ya que extends no permite la referncia a múltiples clases/interfaces.
Adicionalmente, Oracle hace referencia a veces a la extensión de una interfaz como si fuese la extensión de una clase, cosa que no es cierta, porque hace la implementación y porque extends no funciona si pones una interfaz detrás.
Saludos.