/ / solo una cosa rápida sobre el polimorfismo - java, polimorfismo

Solo una cosa rápida sobre el polimorfismo - java, polimorfismo

Decir para la clase ClassOne se extiende desde ClassTwo, classone es la subclase y ClassTwo es la superclase si fui a otra clase y escribí: ClassTwo hello = new ClassOne(); ¿Significa esto que solo puedo usar los métodos que están en ClassOne que han sido heredados de ClassTwo y no los métodos que originalmente estaban en ClassOne? (Por ejemplo, un método llamado void eat(); estaba en ClassTwo y ClassOne heredó pero el método void walk(); estaba solo en ClassOne y no en ClassTwo entonces usando el hello palabra clave, ¿podría acceder a la función comer y nola función de caminar?), no entiendo muy bien el concepto de polimorfismo. ¿Alguien puede explicarlo de manera muy simple y dando un ejemplo? Muchas gracias.

Respuestas

1 para la respuesta № 1

Sí, eso es cierto, el sistema verá classOne como un classTwo en lo que respecta a los métodos disponibles. Me gusta pensar en estos conceptos como cubos, en este caso classOne cabe en un classTwo Cubeta. Si pongo un classOne en un classTwo cubo solo puedo ver el classTwo Cubeta. Sin embargo, podría elegir el classOne desde el classTwo balde, es decir, puedo lanzarlo.

Esto también ayuda en el caso de upcasting ydowncasting, es decir, convertir un objeto a un supertipo o subtipo. Usted pone el artículo en una cesta (hacia arriba) o lo saca de la cesta (hacia abajo).

Esta analogía puede ser una mierda, pero me ayuda :)

Para responder a su pregunta, sí, no puede hacer una llamada a un método que esté en classOne si está fundido en un classTwo.

Esto es útil y muchas veces preferible. Pensar en interfaces, básicamente una interfaz le dice a su objeto queProporcionar un conjunto de métodos. De esta manera podemos asegurarnos de que estos métodos estén disponibles para todos los que llamen a ese objeto, el contrato que el objeto tiene con su entorno.

También un posible duplicado: Intenta describir el polimorfismo tan fácil como puedas


0 para la respuesta № 2

La pregunta describe, sobre todo claramente, un SSCCE que también podrías escribir y ponerte a prueba fácilmente.

La relación de un objeto de una clase con un método o campo en esa clase es "tiene un".

La relación de un subtipo con un supertipo es "es un".

En ClassTwo hello = new ClassOne();, el tipo declarado de hello es ClassTwo. La expresión de la derecha se evalúa con el tipo ClassOne pero luego se lanza para escribir ClassTwo. Y ClassTwos no tiene un walk().

ClassTwos tiene un eat(), y también ClassOnes. La magia sucede cuando también declaras void eat() en ClassOne (con la misma firma de método quesu superclase) Anular el método de esta manera permite que se produzca un comportamiento diferente o adicional cuando ¡ClassOnes come! ... Hasta aquí he dejado caer algunos términos que seguramente puedes buscar por ti mismo. Ahora simplemente afirmaré que el término "comer" se está usando polimórficamente allí. Pero ese es solo un pequeño ejemplo. No puedo encapsular ningún concepto tan abstracto pero poderoso.