Foro de elhacker.net

Programación => Java => Mensaje iniciado por: Feedeex en 1 Agosto 2011, 03:57 am



Título: Creando una subclase de Point
Publicado por: Feedeex en 1 Agosto 2011, 03:57 am
Hola a todos. Estoy aprendiendo java y aún no logro entender algunas cosas.

Si tengo el siguiente código:

Código:
package Punto3D;

import java.awt.*;


public class Punto3D extends Point {
    public int z;
    
    public Punto3D(int x, int y, int z) {
        super(x, y);
        this.z = z;
    }
    
    public void move(int x, int y, int z) {
        this.z = z;
        super.move(x, y);
    }
    
    public void translate(int x, int y, int z) {
        this.z += z;
        super.translate(x, y);
    }
    
}

¿De qué sirve que le indique a java que (x,y) son tomados de la superclase Point?. Si total ni x, ni y, ni z tienen ningún valor.

¿No sería lo mismo hacer así?:

Código:
this.z = z;
this.x = x;
this.y = y;

Acá estoy indicando que tanto x, como y, como z, son las coordenadas del objeto que estoy utilizando en ese momento... ¿entonces para qué usar super?.

A lo que voy es que no entiendo porque tengo que aclarar eso, si ninguna de las 3 tiene absolutamente ningún valor. Entonces, llamándola así:

Código:
objeto.move(x, y, z);

tendría que funcionar con las 2 formas que puse anteriormente, ¿o no?.


Como verán, estoy un poco enredado. Espero que puedan aclararme esa duda.

Muchas gracias.


Título: Re: Creando una subclase de Point
Publicado por: Valkyr en 1 Agosto 2011, 12:51 pm
Lo de super(x, y) se tiene que usar a la fuerza porque estás heredando de la clase Point, y los atributos de esa clase deben ser inicializados con el constructor de esa clase, ya que tú en tu clase Punto3D no puedes acceder de forma directa a esos atributos. Es decir, tú no podrías hacer lo siguiente:

Código
  1. public Punto3D(int x, int y, int z){
  2. this.x = x;
  3. this.y = y;
  4. this.z = z;
  5. }

El compilador te daría error, ya que estás intentando acceder a atributos que no están declarados en tu clase, si no que han sido heredados.

Por el mismo motivo en el método move debes hacer una llamada a super.move(x, y) porque si no, no podrías cambiar el valor de esos atributos.

Saludos.


Título: Re: Creando una subclase de Point
Publicado por: Feedeex en 1 Agosto 2011, 18:04 pm
Gracias por responder. Creo que voy entendiendo un poco más. Pero entonces, si yo crearía la clase Point3D sin heredar de Point, declararía int x, y, z ¿y ahí si podría usar this para todos los objetos, no?.

No le veo utilidad entonces a Point digamos porque no ahorra mucho código y únicamente funciona con bidimensiones, ¿o me equivoco?.


Título: Re: Creando una subclase de Point
Publicado por: Valkyr en 1 Agosto 2011, 21:39 pm
La herencia en java sirve para la reutilización de código entre otras cosas, y aunque en tu caso no sean demasiadas lineas de código, o demasiadas funcionalidades, la herencia viene estupendamente. Además, es un buen hábito el desarrollar las clases empleando el código de otras que ya están programadas, por varios motivos, entre ellos, que te ahorras mucho trabajo, y si detectas un error tan solo debes corregirlo en sitios muy puntuales.

Como tú dices, si no heredases de Point podrías declarar los tres atributos y asignarles valores tal y como dices, aunque heredando también puedes declarar tres atributos con el mismo nombre que los que hay en la clase padre y manipularlos, pero estarías duplicando atributos, lo cual no es que sea muy bueno.

Yo dejaría el código como está, heredando de Point, así si alguna vez quisieses añadir alguna funcionalidad para la clase Punto la tendrías también en la clase Point3D.

Saludos.


Título: Re: Creando una subclase de Point
Publicado por: Feedeex en 2 Agosto 2011, 01:00 am
Muchas gracias por la explicación. Ya no tengo más dudas por el momento.

 ;-)