Java - Nivel de herencia

 
Vista:
sin imagen de perfil
Val: 3
Ha aumentado 1 puesto en Java (en relación al último mes)
Gráfica de Java

Nivel de herencia

Publicado por Armando (2 intervenciones) el 20/07/2018 01:33:53
Buenas tardes compañeros, me encuentro con la siguiente duda.
Estoy estudiando la parte lectura y escritura de archivos, en este caso con "NIO", el detalle es con un método, mas bien saber quien lo redefine.
Para tal caso uso

FileChannel fileChannel = new FileInputStream("archivo.txt").getChannel())

Hasta qui todo bien, la duda surge al usar el método de la clase FileChannel, para mi caso
el método es read(ByteBuffer bb);
En el libro que estoy leyendo el autor lo utiliza, pero me confunde porque en la documentación de la API de Java https://docs.oracle.com/javase/10/docs/api/index.html?overview-summary.html
Este método se muestra como abstracto por lo tanto no tiene cuerpo, entonces busque que la interfaz donde fue declarado originalmente es https://docs.oracle.com/javase/10/docs/api/index.html?overview-summary.html, sin embargo ya busque que clase o interfaz se encarga de redefinir este método, y no lo encuentro y por lo tanto me confunde.

Espero me puedan ayudar, ya que si avanzo siempre voy a tener la duda de quien redefine ese método...
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

Nivel de herencia

Publicado por Tom (1605 intervenciones) el 20/07/2018 10:04:49
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Nivel de herencia

Publicado por Tom (1605 intervenciones) el 20/07/2018 11:03:56
La implementación de ese método, no tienes por qué verla ...
Puede cambiar, pero será la clase FileInputStream la que creará un objeto del tipo FileChannelImpl que extiende FileChannel para implementar las operaciones abstract. Este objeto FileChannelImpl es lo que recibes del método getChannel().
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
sin imagen de perfil
Val: 3
Ha aumentado 1 puesto en Java (en relación al último mes)
Gráfica de Java

Nivel de herencia

Publicado por Armando (2 intervenciones) el 20/07/2018 20:04:22
Muchas gracias Tom, entiendo lo que dices de porque que no tengo ver la implementación del método.
Como todo programador de acuerdo a lo que se aprende de como funciona la filosofía de java, es decir cuando uno tiene un proyecto y se elaboran las clases, por ejemplo tener interfaces o clases abstractas, existirá una clase que implemente los métodos abstractos de dichas clases, en mi caso, me confundí, pues cuando voy a la documentación de Java, me encontré con el método que era abstracto y dije como es posible que se pueda usar si la clase que lo declara, solo lo hereda pero no lo implementa y de ahí surgió mi duda, gracias a tu respuesta Tom busque la clase FileChannelImpl, en el sitio web donde encontré el código fuente http://www.docjar.org/html/api/gnu/java/nio/channels/FileChannelImpl.java.html, menciona que esta clase no es visible para los usuarios, supongo que pasa algo similar como cuando se usan los tipos enum al momento de compilar y ejecutar se crean métodos que no son visibles en el código y que no están en la documentación de java.

Al final la API de java no es muy amigable en ciertos contextos y veo que la respuesta que me diste es mas por tu experiencia, cosa que aun me falta por descubrir mas, me despido y ahora me quedo tranquilo pues ya se por fin quien redefine esos métodos...
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Nivel de herencia

Publicado por Tom (1605 intervenciones) el 20/07/2018 21:28:52
No estoy de acuerdo contigo en que la api de java no sea amigable ... es como es, por diseño :) Y la documentación está bastante bien hecha, además de ser extensiva. En ella, siempre que se presenta una clase abstracta o con métodos abstractos que deban (re)implementarse se indica claramente (o razonablemente claro).

Cuando te vayas acostumbrando mejor a lo de las clases abstractas, interfaces, y demás, estas cosas dejarán de hacerte perder tiempo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar