Foros del Web » Programación para mayores de 30 ;) » Java »

[SOLUCIONADO] Declarar metodos despues de crear un objeto

Estas en el tema de Declarar metodos despues de crear un objeto en el foro de Java en Foros del Web. Saludos compañeros, antes de exponer mi duda felicitar a la comunidad por lo util que resulta a todos los que estamos comenzando en este mundillo. ...
  #1 (permalink)  
Antiguo 03/07/2013, 07:44
 
Fecha de Ingreso: julio-2013
Ubicación: Almeria
Mensajes: 8
Antigüedad: 11 años, 4 meses
Puntos: 0
Declarar metodos despues de crear un objeto

Saludos compañeros, antes de exponer mi duda felicitar a la comunidad por lo util que resulta a todos los que estamos comenzando en este mundillo.

Mi duda es la siguiente, en alguna ocasion he visto por ahi la siguiente estructura que no comprendo.
Código:
    Clase nombre_objeto = new Clase(){
        public metodo(){
          sentencias del metodo
   }
}
¿Alguien me podria explicar que es eso de declarar un metodo justo despues de construir el objeto?, siempre habia declarar metodos en la declaracion de una clase, pero nunca de esta manera.

Aqui dejo un ejemplo de [URL="http://stackoverflow.com/questions/3256086/jcombobox-in-a-jtable-cell"]stackoverflow[/URL]
Código:
JTable table = new JTable(model)
        {
            //  Determine editor to be used by row
            public TableCellEditor getCellEditor(int row, int column)
            {
                int modelColumn = convertColumnIndexToModel( column );

                if (modelColumn == 1 && row < 3)
                    return editors.get(row);
                else
                    return super.getCellEditor(row, column);
            }
        };
Gracias de antemano.
  #2 (permalink)  
Antiguo 03/07/2013, 11:26
Avatar de chuidiang
Colaborador
 
Fecha de Ingreso: octubre-2004
Mensajes: 3.774
Antigüedad: 20 años, 1 mes
Puntos: 454
Respuesta: Declarar metodos despues de crear un objeto

Hola:

Cuando heredas de una clase, puedes sobreescribir los métodos de la clase padre, bien para cambiar su comportamiento, bien porque la clase padre es abstracta y necesitas implementar ese método, o incluso la clase padre es una interfaz y necesitas implementar todos sus métodos.

En java, al tirar mucho de interfaces y clases abstractas (todo tipo de listeners como ActionListener, MouseLintener, TableModelListener, etc) es muy habitual heredar e implementar métodos, a veces, a lo tonto, como el caso de ActionListener que sólo tiene un método o de Runnable, que sólo tiene un método. Así que java ofrece una forma "ágil" de definir una clase hija con estos métodos sobre la marcha, que es lo que estás viendo.

Cuando haces algo como lo que muestras, estás en realidad creando una clase hija (de JTable en tu caso) con un método sobreescrito (getCellEditor()). Es más habitual ver esto en botones así

Código Java:
Ver original
  1. jbutton.addActionListener (
  2.    new ActionListener () {
  3.       public void actionPerformed(ActionEvent e) {
  4.         // Aqui lo que tiene que hacer el botón cuando lo pulsas
  5.       }
  6.    }
  7. );

Aquí estás creando una clase hija (que implementa) ActionListener y definiendo su método sobre la marcha. Te ahorras crear una clase de verdad con fichero java incluido que implemente la interfaz. La "pega" es que esa clase hija no puedes utilizarla en más sitios, la has creado sobre la marcha y no tiene un nombre "ClaseHija" con el que poder hacer nuevos news.

Si miras los ficheros.class generados, verás que hay uno estilo NombreClase$1.class (o algo así) . Esa es la clase hija de ActiloListener que has creado al vuelo. En tu proyecto, deberías tener algo parecido para la clase hija de JTable al vuelo.

Se bueno.
__________________
Apuntes Java
Wiki de Programación
  #3 (permalink)  
Antiguo 04/07/2013, 02:45
 
Fecha de Ingreso: julio-2013
Ubicación: Almeria
Mensajes: 8
Antigüedad: 11 años, 4 meses
Puntos: 0
Respuesta: Declarar metodos despues de crear un objeto

Muchas gracias chuidiang, voy a trastear a ver que saco en claro.

Etiquetas: clase, declarar, metodo, metodos, objeto
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 13:48.