style="display:inline-block;width:728px;height:90px"
data-ad-client="ca-pub-5164839828746352"
data-ad-slot="7563230308">

Duda sobre Constructores

Hola! soy nueva en el foro y también en lo que respecta a Java, estoy estudiando el libro de Deitel y me esta costando trabajo entender lo que es y hace un constructor, el ejemplo que estoy tratando de entender es el siguiente, se divide en 2 partes, disculpen si no lleva las sangrias correspondientes, mis preguntas estan en la parte inferior del post:

import java.awt.Graphics;
import javax.swing.JPanel;
public class Figuras extends JPanel
{
    private int opcion; // opción del usuario acerca de cuál figura dibujar

// el constructor establece la opción del usuario
public Figuras( int opcionUsuario )
{
    opcion = opcionUsuario;
 } // fin del constructor de Figuras

// dibuja una cascada de figuras, empezando desde la esquina superior izquierda
public void paintComponent( Graphics g )
{
    super.paintComponent( g );

    for ( int i = 0; i < 10; i++ )
    {
    // elije la figura con base en la opción del usuario
        switch ( opcion )
        {
            case 1: // dibuja rectángulos
            g.drawRect( 10 + i * 10, 10 + i * 10,
            50 + i * 10, 50 + i * 10 );
            break;
            case 2: // dibuja óvalos
            g.drawOval( 10 + i * 10, 10 + i * 10,
            32 50 + i * 10, 50 + i * 10 );
            break;
          } // fin del switch
     } // fin del for
} // fin del método paintComponent
} // fin de la clase Figuras

**************************************************************************************

import javax.swing.JFrame;
import javax.swing.JOptionPane;

public class PruebaFiguras
{
    public static void main( String args[] )
    {
    // obtiene la opción del usuario
        String entrada = JOptionPane.showInputDialog(
        "Escriba 1 para dibujar rectangulos\n" +
        "Escriba 2 para dibujar ovalos" );

        int opcion = Integer.parseInt( entrada ); // convierte entrada en int

        // crea el panel con la entrada del usuario
        Figuras panel = new Figuras( opcion );

       JFrame aplicacion = new JFrame(); // crea un nuevo objeto JFrame

       aplicacion.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
       aplicacion.add( panel ); // agrega el panel al marco
       aplicacion.setSize( 300, 300 ); // establece el tamaño deseado
       aplicacion.setVisible( true ); // muestra el marco
       } // fin de main
} // fin de la clase PruebaFiguras

PREGUNTAS:
1.- En la clase Figuras, en el comentario "El constructor establece la opción del usuario" porque se hace la asignacion opcion = opcionUsuario; no debería ser lo contrario ya que la variable opción es la que tiene almacenada la elección del usuario en la clase principal?

2.- Si alguien es tan amable de explicarme cual es la función de un constructor se los agradecería =) es diferente a crear un objeto de una clase? ej. JFrame aplicacion = new JFrame(); expliquenmelo con peras y manzanas por favor! tengo años sin practicar la programación! me la he vivido utilizando ArcGis y Autocad Map y ahora estoy tratando de aprender Java ya que he visto que tiene buena demanda en mi ciudad.

Por su ayuda MIL GRACIAS! =)

Opciones de visualización de comentarios

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.
Imagen de CesarAlducin

Un Constructor es un método

Un Constructor es un método especial en Java empleado para inicializar valores en Instancias de Objetos, a través de este tipo de métodos es posible generar diversos tipos de instancias para la Clase en cuestión; la principal característica de este tipo de métodos es que llevan el mismo nombre de la clase

tal y como lo dice la cita que te pase la funcion del constructor es inicializar valores en instancias de objetos.

private int opcion; // opción del usuario acerca de cuál figura dibujar

// el constructor establece la opción del usuario

public Figuras( int opcionUsuario )
{
opcion = opcionUsuario;
} // fin del constructor de Figuras

Con esto le estas inicializando una instancia de la OpcionUsuario.

Espero a ver sido claro y ojala alguien mas pueda colaborar para apoyarte en esto.

Imagen de Jose Manuel

Pues @CesarAlducin ya te

Pues @CesarAlducin ya te respondió correctamente. Pero aquí va mi explicación.
Te responderé de acuerdo a tus preguntas:

1.- Cuando en la clase PruebaFiguras creas una instancia (objeto) de la clase Figuras estas llamando al constructor de la clase Figuras.
Haber, ¿Como esta eso? Pues así;
Figuras panel = Figuras(opcion);
Cuando esa linea es ejecutada toma como parámetro la variable de tipo entero llamada opcion que pertenece a tu clase PruebaFiguras entonces, cuando creas el objeto llamas al constructor de la clase Figuras que recibe un valor de tipo entero que se llama opcionUsuario y el parámetro es asignado a tu variable de instancia que se llama opcion ahora tu variable de instancia opcion es inicializada con el valor de tu variable local( la de PruebaFiguras) y allí termina el constructor.

2.-Cuando haces un JFrame aplicacion = new JFrame(); estas haciendo exactamente lo mismo que con Figuras panel = new Figuras(opcion). La diferencia radica en el parámetro que reciben los dos contructores de dichas clases. En la clase Figuras, al crear una instancia de esa clase debes de pasarle como parámetro un valor de tipo entero si o si.

En cambio con la clase JFrame es diferente, porque esta puede no recibir ningún parámetro o puede recibir otro tipos de valores. Dale click aquí JFrame y revisa la parte que dice Constructor Summary. El que la clase JFrame pueda recibir varios tipos de valores se le llama Sobrecarga de constructores (esto también puede hacerse con los métodos normales y se llama sobrecarga de metodos).

Espero que te haya servido la explicación. Saludos.

Imagen de Java_newbie

Gracias!

Ok, muchas gracias por su tiempo y respuestas a los dos Cesar y Jose Manuel, ya me quedo mas claro! =)

Saludos!

>1.- En la clase Figuras, en


1.- En la clase Figuras, en el comentario "El constructor establece la opción del usuario" porque se hace la asignacion opcion = opcionUsuario; no debería ser lo contrario ya que la variable opción es la que tiene almacenada la elección del usuario en la clase principal?

No, el atributo opción pertenece a la clase y la variable opcionUsuario es un parámetro del constructor:

public class Figuras extends JPanel {

    private int opcion; // <-- Atributo opción
    public Figuras( int opcionUsuario ) { // <-- parametro del constructor
        opcion = opcionUsuario;  // asignar el valor del parametro al atributo
     } //
....

2.- Si alguien es tan amable de explicarme cual es la función de un constructor se los agradecería =) es diferente a crear un objeto de una clase? ej. JFrame aplicacion = new JFrame(); expliquenmelo con peras y manzanas por favor! ..

Si, esa es justamente su función, crea un objeto de la clase ( lo instancía ).

No es un método, ni un método especial. Es en todo caso como un método en tanto que se parece mucho, pero lo más importate que lo diferencía es:

1. No tiene tipo de retorno ( y por lo tanto no se utiliza return )
2. Lleva siempre el nombre de la clase
3. Crea una instancia de la clase siempre que es invocado.

Como bien sabes, las clases son similares a los planos de una casa en tanto que especifican los atributos de la casa. Y los objetos son como casas construidas con esos planos.

Un constructor, pues, construye una casa.

Con Peras:

class Pera {
    Pera() { //<-- constructor
         System.out.println("Esta es otra pera");
    }
}
...
Pera pera = new Pera(); // <-- llamar al constructor

Se le pueden pasar argumentos para construir objetos con características diferentes

class Manzana {
    private  String color;
    public Manzana( String deQueColor ) {
         this.color  = deQueColor;
    }
    public String toString()  {
        return  "Esta es un manzana " + color;
    }
}
....
Manzana roja = new Manzana("roja");
Manzana verde = new Manzana("verde");
System.out.println( roja );
System.out.println(  verde );

Saludos

Imagen de Jose Manuel

Entonces un constructor es

Entonces un constructor es como un elemento propio de una clase y en el que su identificador coincide con el del nombre de la clase.

Si esto es así; quedamos de acuerdo en que no es ningún método especial ni método de nada. Es un elemento propio de la clase, usado para inicializar los atributos de una clase durante un instanciamiento.

¿Ando bien?

style="display:inline-block;width:728px;height:90px"
data-ad-client="ca-pub-5164839828746352"
data-ad-slot="7563230308">