Archivo de la etiqueta: clase

Casting de variables de referencia (Conversión)

  • En Animal animal = new Perro(); la variable de referencia del tipo Animal contiene realmente un perro, pero los métodos específicos de la clase Perro no funcionan. Sólo funcionan los métodos overriden de la superclase Animal.
  • En Perro p = (Perro) animal; todos los métodos de la subclase Perro funcionan. Aquí hay una conversión hacia abajo (downcast).
  • Ejemplo:

// Si la clase Animal es pública, entonces debe estar en un archivo Animal.java
class Animal{
	void hacerRuido(){
		System.out.println("Ruidos genericos de animales");
	}
}

// Si la clase Perro es pública, entonces debe estar en un archivo Perro.java
class Perro extends Animal{
	// Método Overriden de la superclase Animal
	void hacerRuido(){
		System.out.println("Ladrar");
	}
	void darLaPatita(){
		System.out.println("Dar la patita");
	}
}

class AplicacionConversion{
	public static void main(String[] args){
		Animal[] a = {new Animal(), new Perro()};
		for (Animal animal : a){
			animal.hacerRuido();
			if (animal instanceof Perro){
				// animal.darLaPatita(); No funciona
				Perro p = (Perro) animal; // downcast
				Animal b = (Perro) animal; // Compila y no funciona con b.darLaPatita();
				p.darLaPatita();
			}
		}
	}
}

java.lang.ClassCastException:
class Animal { }
class Perro extends Animal { }
class AplicacionPerro {
   public static void main(String [] args) {
      Animal animal = new Animal();
      Perro p = (Perro) animal; // compila, pero falla después
  }
}
  • Ejemplo de upcast:
class Animal { } class Perro extends Animal { } class AplicacionPerro2 { public static void main(String [] args) { Perro d = new Perro(); Animal a1 = d; // upcast con no-explícita cast Animal a2 = (Animal) d; // upcast con explícita cast } }

 

Implementar interfaces – Java

  • La clase que implementa debe implementar todos los métodos de la interface.
  • Una clase puede implementar más de una interface:

public class Quert implements InterfaceA, InterfaceB {}

  • Una interface puede extender otra interface, pero nunca puede implementar:

public InterfaceA extends InterfaceB {}

  • Una interface puede extender más de una interface:

public InterfaceA extends InterfaceB, interfaceC {}

  • Una clase que implementa puede ser abstracta:

abstract class Qwert implements InterfaceA {}

Aquí la subclase concreta que extienda la clase abstracta Qwert debe implementar todos los métodos de la interface.

  • Ejemplos:

class Foo { } // OK
class Bar implements Foo { } // No. Una clase no puede implementar una clase
interface Baz { } // OK
interface Fi { } // OK
interface Fee implements Baz { } // No. Una interface no puede implementar una interface
interface Zee implements Foo { } // No. Una interface no puede implementar una clase
interface Zoo extends Foo { } // No. una interface no puede extender una clase
interface Boo extends Fi { } // OK.  Una interface puede extender una interface
class Toon extends Foo, Button { } // No. Una clase no puede extender varias clases
class Zoom implements Fi, Fee { } // OK.  Una clase puede implementar varias interfaces
interface Vroom extends Fi, Fee { } // OK. Una interface puede extender varias interfaces
class Yow extends Foo implements Fi { } // OK. Una clase puede ambas. (extends deber estar primero)

Métodos overriden (Sobreescritos) – Java

  • El beneficio de un método overriden es definir un método con una acción específica distinta -en una subclase- de la acción definida en el método de la superclase.
  • Un método final de una superclase no puede ser un método overriden.
  • Los métodos abstractos de una superclase deben ser overriden en una subclase, a menos que la subclase sea también abstracta.
  • Los métodos overriding de la subclase no pueden ser más restrictivo que el método overriden de la superclase. Por ejemplo, no puede pasar un método público de una superclase a método protegido en la subclase.
  • Los argumentos de los métodos overriden y su overriding deben ser exactamente los mismos.
  • El tipo return debe ser el mismo para los métodos overriden y overriding.
  • El nivel de acceso del método overriding de la subclase puede ser menos restrictivo que el método overriden de la superclase.
  • Los métodos estáticos no pueden ser overriden.

Java – Cómo escribir un ActionListener

Para escribir un Action Listener :

  1. Declara una clase que implemente un ActionListener o extienda una clase que implemente ActionListener. Por ejemplo:
              public class MiClase implements ActionListener { 
  2. Registra un objeto de tu clase como “listener”. Por ejemplo:
              miBoton.addActionListener(this);
  3. Escribe el código que implementa tu “listener”. Por ejemplo:
              public void actionPerformed(ActionEvent e) { 
    ...//el código que quieras que haga tu "listener"...
    }