![]() |
| |||||||
| Registrarse | Preguntas Frecuentes | Lista de Foreros | Calendario | Buscar | Temas de Hoy | Marcar Foros Como Leídos |
![]() |
| | LinkBack | Herramientas | Desplegado |
| |||
| Hola. Tengo el siguiente problema Defino la clase base Emple y la clase derivada Jefe. A continuación declaro un array de Emple donde meto instancias de Emple y Jefe indistintamente para tener una "colección heterogénea". Emple e[] = new Emple[5]; e[0] = new Emple("Luis", "V", 1000); e[1] = new Jefe("RRHH", "Pepe", "V", 1500); etc. Si invoco un método de Emple con un objeto Jefe del array, me lo ejecuta sin problemas, pero si trato de ejecutar un método de Jefe (para el objeto e[1], por ejemplo, me da error diciendo que no encuentra ese método en Emple o algo muy parecido. ¿Cuál es el problema? He intentado poner "cast" y no me lo admite. ¿Puede ser un problema de constructor de copia? No lo veo claro. Si alguien tiene alguna pista, se lo agradecería... Gracias. |
| | ||||
| ||||
| |
| |||
| pete wrote: > Hola. Tengo el siguiente problema > > Defino la clase base Emple y la clase derivada Jefe. A continuación declaro > un array de Emple donde meto instancias de Emple y Jefe indistintamente para > tener una "colección heterogénea". > > Emple e[] = new Emple[5]; > e[0] = new Emple("Luis", "V", 1000); > e[1] = new Jefe("RRHH", "Pepe", "V", 1500); > etc. > > Si invoco un método de Emple con un objeto Jefe del array, me lo ejecuta sin > problemas, pero si trato de ejecutar un método de Jefe (para el objeto e[1], > por ejemplo, me da error diciendo que no encuentra ese método en Emple o Claro. e[1] está declarado como de tipo Emple (por pertenecer a un Emple[]). Lo único que puedes garantizar es que e[1] tiene los métodos declarados en Emple. Dicho de otra manera. Para decidir qué métodos puedes utilizar, debes considerar el tipo declarado (Emple) y no el tipo real (Jefe). Una cosa que puedes hacer es: if (e[1] instanceof Jefe) ((Jefe)e[1]).metodoDeJefe(); Es decir, primero te aseguras de que el tipo real de la referencia es el que tú crees que es, y luego invocas el método de Jefe, previo cast a Jefe. Pruébalo. Seguro que funciona. Pero no te olvides de la comprobación inicial del tipo. Saludos > algo muy parecido. ¿Cuál es el problema? He intentado poner "cast" y no me > lo admite. ¿Puede ser un problema de constructor de copia? No lo veo claro. > Si alguien tiene alguna pista, se lo agradecería... > > Gracias. > > |
| |||
| pete wrote: > Hola. Tengo el siguiente problema > > Defino la clase base Emple y la clase derivada Jefe. A continuación declaro > un array de Emple donde meto instancias de Emple y Jefe indistintamente para > tener una "colección heterogénea". > > Emple e[] = new Emple[5]; > e[0] = new Emple("Luis", "V", 1000); > e[1] = new Jefe("RRHH", "Pepe", "V", 1500); > etc. > > Si invoco un método de Emple con un objeto Jefe del array, me lo ejecuta sin > problemas, pero si trato de ejecutar un método de Jefe (para el objeto e[1], > por ejemplo, me da error diciendo que no encuentra ese método en Emple o Claro. e[1] está declarado como de tipo Emple (por pertenecer a un Emple[]). Lo único que puedes garantizar es que e[1] tiene los métodos declarados en Emple. Dicho de otra manera. Para decidir qué métodos puedes utilizar, debes considerar el tipo declarado (Emple) y no el tipo real (Jefe). Una cosa que puedes hacer es: if (e[1] instanceof Jefe) ((Jefe)e[1]).metodoDeJefe(); Es decir, primero te aseguras de que el tipo real de la referencia es el que tú crees que es, y luego invocas el método de Jefe, previo cast a Jefe. Pruébalo. Seguro que funciona. Pero no te olvides de la comprobación inicial del tipo. Saludos > algo muy parecido. ¿Cuál es el problema? He intentado poner "cast" y no me > lo admite. ¿Puede ser un problema de constructor de copia? No lo veo claro. > Si alguien tiene alguna pista, se lo agradecería... > > Gracias. > > |
| |||
| pete wrote: > Hola. Tengo el siguiente problema > > Defino la clase base Emple y la clase derivada Jefe. A continuación declaro > un array de Emple donde meto instancias de Emple y Jefe indistintamente para > tener una "colección heterogénea". > > Emple e[] = new Emple[5]; > e[0] = new Emple("Luis", "V", 1000); > e[1] = new Jefe("RRHH", "Pepe", "V", 1500); > etc. > > Si invoco un método de Emple con un objeto Jefe del array, me lo ejecuta sin > problemas, pero si trato de ejecutar un método de Jefe (para el objeto e[1], > por ejemplo, me da error diciendo que no encuentra ese método en Emple o Claro. e[1] está declarado como de tipo Emple (por pertenecer a un Emple[]). Lo único que puedes garantizar es que e[1] tiene los métodos declarados en Emple. Dicho de otra manera. Para decidir qué métodos puedes utilizar, debes considerar el tipo declarado (Emple) y no el tipo real (Jefe). Una cosa que puedes hacer es: if (e[1] instanceof Jefe) ((Jefe)e[1]).metodoDeJefe(); Es decir, primero te aseguras de que el tipo real de la referencia es el que tú crees que es, y luego invocas el método de Jefe, previo cast a Jefe. Pruébalo. Seguro que funciona. Pero no te olvides de la comprobación inicial del tipo. Saludos > algo muy parecido. ¿Cuál es el problema? He intentado poner "cast" y no me > lo admite. ¿Puede ser un problema de constructor de copia? No lo veo claro. > Si alguien tiene alguna pista, se lo agradecería... > > Gracias. > > |
| |||
| pete wrote: > Hola. Tengo el siguiente problema > > Defino la clase base Emple y la clase derivada Jefe. A continuación declaro > un array de Emple donde meto instancias de Emple y Jefe indistintamente para > tener una "colección heterogénea". > > Emple e[] = new Emple[5]; > e[0] = new Emple("Luis", "V", 1000); > e[1] = new Jefe("RRHH", "Pepe", "V", 1500); > etc. > > Si invoco un método de Emple con un objeto Jefe del array, me lo ejecuta sin > problemas, pero si trato de ejecutar un método de Jefe (para el objeto e[1], > por ejemplo, me da error diciendo que no encuentra ese método en Emple o Claro. e[1] está declarado como de tipo Emple (por pertenecer a un Emple[]). Lo único que puedes garantizar es que e[1] tiene los métodos declarados en Emple. Dicho de otra manera. Para decidir qué métodos puedes utilizar, debes considerar el tipo declarado (Emple) y no el tipo real (Jefe). Una cosa que puedes hacer es: if (e[1] instanceof Jefe) ((Jefe)e[1]).metodoDeJefe(); Es decir, primero te aseguras de que el tipo real de la referencia es el que tú crees que es, y luego invocas el método de Jefe, previo cast a Jefe. Pruébalo. Seguro que funciona. Pero no te olvides de la comprobación inicial del tipo. Saludos > algo muy parecido. ¿Cuál es el problema? He intentado poner "cast" y no me > lo admite. ¿Puede ser un problema de constructor de copia? No lo veo claro. > Si alguien tiene alguna pista, se lo agradecería... > > Gracias. > > |
| |||
| pete wrote: > Hola. Tengo el siguiente problema > > Defino la clase base Emple y la clase derivada Jefe. A continuación declaro > un array de Emple donde meto instancias de Emple y Jefe indistintamente para > tener una "colección heterogénea". > > Emple e[] = new Emple[5]; > e[0] = new Emple("Luis", "V", 1000); > e[1] = new Jefe("RRHH", "Pepe", "V", 1500); > etc. > > Si invoco un método de Emple con un objeto Jefe del array, me lo ejecuta sin > problemas, pero si trato de ejecutar un método de Jefe (para el objeto e[1], > por ejemplo, me da error diciendo que no encuentra ese método en Emple o Claro. e[1] está declarado como de tipo Emple (por pertenecer a un Emple[]). Lo único que puedes garantizar es que e[1] tiene los métodos declarados en Emple. Dicho de otra manera. Para decidir qué métodos puedes utilizar, debes considerar el tipo declarado (Emple) y no el tipo real (Jefe). Una cosa que puedes hacer es: if (e[1] instanceof Jefe) ((Jefe)e[1]).metodoDeJefe(); Es decir, primero te aseguras de que el tipo real de la referencia es el que tú crees que es, y luego invocas el método de Jefe, previo cast a Jefe. Pruébalo. Seguro que funciona. Pero no te olvides de la comprobación inicial del tipo. Saludos > algo muy parecido. ¿Cuál es el problema? He intentado poner "cast" y no me > lo admite. ¿Puede ser un problema de constructor de copia? No lo veo claro. > Si alguien tiene alguna pista, se lo agradecería... > > Gracias. > > |
| |||
| pete wrote: > Hola. Tengo el siguiente problema > > Defino la clase base Emple y la clase derivada Jefe. A continuación declaro > un array de Emple donde meto instancias de Emple y Jefe indistintamente para > tener una "colección heterogénea". > > Emple e[] = new Emple[5]; > e[0] = new Emple("Luis", "V", 1000); > e[1] = new Jefe("RRHH", "Pepe", "V", 1500); > etc. > > Si invoco un método de Emple con un objeto Jefe del array, me lo ejecuta sin > problemas, pero si trato de ejecutar un método de Jefe (para el objeto e[1], > por ejemplo, me da error diciendo que no encuentra ese método en Emple o Claro. e[1] está declarado como de tipo Emple (por pertenecer a un Emple[]). Lo único que puedes garantizar es que e[1] tiene los métodos declarados en Emple. Dicho de otra manera. Para decidir qué métodos puedes utilizar, debes considerar el tipo declarado (Emple) y no el tipo real (Jefe). Una cosa que puedes hacer es: if (e[1] instanceof Jefe) ((Jefe)e[1]).metodoDeJefe(); Es decir, primero te aseguras de que el tipo real de la referencia es el que tú crees que es, y luego invocas el método de Jefe, previo cast a Jefe. Pruébalo. Seguro que funciona. Pero no te olvides de la comprobación inicial del tipo. Saludos > algo muy parecido. ¿Cuál es el problema? He intentado poner "cast" y no me > lo admite. ¿Puede ser un problema de constructor de copia? No lo veo claro. > Si alguien tiene alguna pista, se lo agradecería... > > Gracias. > > |
| |||
| pete wrote: > Hola. Tengo el siguiente problema > > Defino la clase base Emple y la clase derivada Jefe. A continuación declaro > un array de Emple donde meto instancias de Emple y Jefe indistintamente para > tener una "colección heterogénea". > > Emple e[] = new Emple[5]; > e[0] = new Emple("Luis", "V", 1000); > e[1] = new Jefe("RRHH", "Pepe", "V", 1500); > etc. > > Si invoco un método de Emple con un objeto Jefe del array, me lo ejecuta sin > problemas, pero si trato de ejecutar un método de Jefe (para el objeto e[1], > por ejemplo, me da error diciendo que no encuentra ese método en Emple o Claro. e[1] está declarado como de tipo Emple (por pertenecer a un Emple[]). Lo único que puedes garantizar es que e[1] tiene los métodos declarados en Emple. Dicho de otra manera. Para decidir qué métodos puedes utilizar, debes considerar el tipo declarado (Emple) y no el tipo real (Jefe). Una cosa que puedes hacer es: if (e[1] instanceof Jefe) ((Jefe)e[1]).metodoDeJefe(); Es decir, primero te aseguras de que el tipo real de la referencia es el que tú crees que es, y luego invocas el método de Jefe, previo cast a Jefe. Pruébalo. Seguro que funciona. Pero no te olvides de la comprobación inicial del tipo. Saludos > algo muy parecido. ¿Cuál es el problema? He intentado poner "cast" y no me > lo admite. ¿Puede ser un problema de constructor de copia? No lo veo claro. > Si alguien tiene alguna pista, se lo agradecería... > > Gracias. > > |
| |||
| pete wrote: > Hola. Tengo el siguiente problema > > Defino la clase base Emple y la clase derivada Jefe. A continuación declaro > un array de Emple donde meto instancias de Emple y Jefe indistintamente para > tener una "colección heterogénea". > > Emple e[] = new Emple[5]; > e[0] = new Emple("Luis", "V", 1000); > e[1] = new Jefe("RRHH", "Pepe", "V", 1500); > etc. > > Si invoco un método de Emple con un objeto Jefe del array, me lo ejecuta sin > problemas, pero si trato de ejecutar un método de Jefe (para el objeto e[1], > por ejemplo, me da error diciendo que no encuentra ese método en Emple o Claro. e[1] está declarado como de tipo Emple (por pertenecer a un Emple[]). Lo único que puedes garantizar es que e[1] tiene los métodos declarados en Emple. Dicho de otra manera. Para decidir qué métodos puedes utilizar, debes considerar el tipo declarado (Emple) y no el tipo real (Jefe). Una cosa que puedes hacer es: if (e[1] instanceof Jefe) ((Jefe)e[1]).metodoDeJefe(); Es decir, primero te aseguras de que el tipo real de la referencia es el que tú crees que es, y luego invocas el método de Jefe, previo cast a Jefe. Pruébalo. Seguro que funciona. Pero no te olvides de la comprobación inicial del tipo. Saludos > algo muy parecido. ¿Cuál es el problema? He intentado poner "cast" y no me > lo admite. ¿Puede ser un problema de constructor de copia? No lo veo claro. > Si alguien tiene alguna pista, se lo agradecería... > > Gracias. > > |
| |||
| "pete" <pandiazQuitaEsto***ya.com> wrote in news:e8j4ji$25a$1***nsnmpen3-gest.nuria.telefonica-data.net: Hmmm tal como yo lo veo, estás tratando de usar un método que no está definido en la clase Emple. Las subclases heredan los métodos de la clase madre, pero la clase "madre" no puede utilizar métodos de las clases "hija". Es decir, los métodos de clases superiores de las que se hereda se pueden invocar, pero a la inversa no. |
| |
| |
![]() |
| Herramientas | |
| Desplegado | |
| |
Temas Similares | ||||
| Tema | Autor | Foro | Respuestas | Último mensaje |
| Polimorfismo en Herencia | daniel | Newsgroup microsoft.public.es.vc | 12 | 20-03-2008 02:55:14 |
| Implementando un polimorfismo. | Javier M Mora | Newsgroup es.comp.lenguajes.c++ | 8 | 25-11-2007 23:38:34 |
| Polimorfismo en Java | Alexandre Vazquez | Newsgroup es.comp.lenguajes.java | 40 | 23-11-2006 08:46:50 |
| pueden aclararme el concepto de polimorfismo ?? | jose | Newsgroup es.comp.lenguajes.c++ | 28 | 29-09-2004 22:44:40 |
| Polimorfismo elevado al cuadrado. | DeiF | Newsgroup es.comp.lenguajes.c++ | 28 | 29-01-2004 13:54:50 |