Impugnar pregunta 39

Temas relacionados con el examen de test
Avatar de Usuario
pajaroloco
Usuario registrado
Mensajes: 103
Registrado: 19 Dic 2013, 17:57
Agradecido: 0
Agradecimiento recibido: 0

Impugnar pregunta 39

Mensaje por pajaroloco »

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"

Avatar de Usuario
al83
PreparaTIC27
Mensajes: 245
Registrado: 18 Nov 2017, 10:31
Agradecido: 0
Agradecimiento recibido: 0

Re: Impugnar pregunta 39

Mensaje por al83 »

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:
The Java programming language supports multiple inheritance of type, which is the ability of a class to implement more than one interface
Referencia: https://docs.oracle.com/javase/tutorial ... tance.html
pajaroloco escribió:
18 Jun 2019, 08:40
Hay muchas dudas sobre "heredar" versus "implementar"

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.

DavidC
PreparaTIC27
Mensajes: 27
Registrado: 11 Jul 2018, 11:19
Agradecido: 0
Agradecimiento recibido: 1 vez

Re: Impugnar pregunta 39

Mensaje por DavidC »

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.

Avatar de Usuario
al83
PreparaTIC27
Mensajes: 245
Registrado: 18 Nov 2017, 10:31
Agradecido: 0
Agradecimiento recibido: 0

Re: Impugnar pregunta 39

Mensaje por al83 »

Creo que el problema está en cómo usamos los términos.
DavidC escribió:
18 Jun 2019, 09:39

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.
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.

Avatar de Usuario
javierbds
Usuario registrado
Mensajes: 125
Registrado: 14 Sep 2017, 10:57
Agradecido: 1 vez
Agradecimiento recibido: 0

Re: Impugnar pregunta 39

Mensaje por javierbds »

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 ...).

Código: Seleccionar todo

interface SomeInterface {
   void foo();
   int  bar();
}
public abstract class YourClass implements SomeInterface {
   // no mention of foo() and bar() here
}
Yo le tuve que dar un par de vueltas en el examen y no digo que no se pueda impugnar pero tambien es defendible.
Ú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]

m6d2
Usuario registrado
Mensajes: 16
Registrado: 07 Oct 2015, 23:09
Agradecido: 0
Agradecimiento recibido: 0

Re: Impugnar pregunta 39

Mensaje por m6d2 »

"...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

DavidC
PreparaTIC27
Mensajes: 27
Registrado: 11 Jul 2018, 11:19
Agradecido: 0
Agradecimiento recibido: 1 vez

Re: Impugnar pregunta 39

Mensaje por DavidC »

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?

DavidC
PreparaTIC27
Mensajes: 27
Registrado: 11 Jul 2018, 11:19
Agradecido: 0
Agradecimiento recibido: 1 vez

Re: Impugnar pregunta 39

Mensaje por DavidC »

Vale me autocorrijo, una interfaz aunque pueda parecer no se considera una clase.
DavidC escribió:
18 Jun 2019, 10:53
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?

Avatar de Usuario
javierbds
Usuario registrado
Mensajes: 125
Registrado: 14 Sep 2017, 10:57
Agradecido: 1 vez
Agradecimiento recibido: 0

Re: Impugnar pregunta 39

Mensaje por javierbds »

DavidC escribió:
18 Jun 2019, 10:55
Vale me autocorrijo, una interfaz aunque pueda parecer no se considera una clase.

...
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]

_0p0s1t0r_
Usuario registrado
Mensajes: 49
Registrado: 02 Jun 2018, 23:29
Agradecido: 0
Agradecimiento recibido: 0

Re: Impugnar pregunta 39

Mensaje por _0p0s1t0r_ »

al83 escribió:
18 Jun 2019, 09:36
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:
The Java programming language supports multiple inheritance of type, which is the ability of a class to implement more than one interface
Referencia: https://docs.oracle.com/javase/tutorial ... tance.html
pajaroloco escribió:
18 Jun 2019, 08:40
Hay muchas dudas sobre "heredar" versus "implementar"

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!

Avatar de Usuario
al83
PreparaTIC27
Mensajes: 245
Registrado: 18 Nov 2017, 10:31
Agradecido: 0
Agradecimiento recibido: 0

Re: Impugnar pregunta 39

Mensaje por al83 »

_0p0s1t0r_ escribió:
18 Jun 2019, 20:21
Como dice @DavidC es necesario distinguir de alguna forma cuando se está implementando de cuando se está heredando.
Según la documentación de Java, implementar una interfaz es una forma de herencia. Hay dos formas básicas de herencia:
- 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.

_0p0s1t0r_ escribió:
18 Jun 2019, 20:21
Yendo a la definición que expones, en la misma frase se hace mención a herencia e implementación.
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_
Usuario registrado
Mensajes: 49
Registrado: 02 Jun 2018, 23:29
Agradecido: 0
Agradecimiento recibido: 0

Re: Impugnar pregunta 39

Mensaje por _0p0s1t0r_ »

Hola,
al83 escribió:
18 Jun 2019, 20:36
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.
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
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.
Saludos.

_G_
Usuario registrado
Mensajes: 3
Registrado: 19 Jun 2019, 11:50
Agradecido: 0
Agradecimiento recibido: 0

Re: Impugnar pregunta 39

Mensaje por _G_ »

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.

Avatar de Usuario
al83
PreparaTIC27
Mensajes: 245
Registrado: 18 Nov 2017, 10:31
Agradecido: 0
Agradecimiento recibido: 0

Re: Impugnar pregunta 39

Mensaje por al83 »

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...
A class C inherits from its direct superclass and direct superinterfaces all abstract and default methods...
Referencia: https://docs.oracle.com/javase/specs/jl ... #jls-8.4.8

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.

_0p0s1t0r_
Usuario registrado
Mensajes: 49
Registrado: 02 Jun 2018, 23:29
Agradecido: 0
Agradecimiento recibido: 0

Re: Impugnar pregunta 39

Mensaje por _0p0s1t0r_ »

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.

Responder

Volver a “PRIMER EXAMEN 2018”