Transformación Java_ (polimorfismo entendido)

1. Transformación

1.1 clase abstracta

cn.itcast.day10.demo06 paquete; 

Animal clase abstracta pública { 

    comer public abstract void (); 

}

1.2 clase Dog

cn.itcast.day10.demo06 paquete; 

public class Perro extiende Animal { 
    @ Override 
    comer public void () { 
        System.out.println ( "狗吃MIERDA"); 
    } 

    Pública caseta de vigilancia void () { 
        System.out.println ( "狗看家"); 
    } 
}

Clase 1.3 del gato

Paquete cn.itcast.day10.demo06; 

Cat public class {Animal extiende la 
    @Override 
    public void EAT () { 
        System.out.println ( "pez gato"); 
    } 

    // método específico subclase 
    catchMouse public void () { 
        el Sistema .out.println ( "gato y el ratón"); 
    } 
}

1.4 Transformación

cn.itcast.day10.demo06 Pena paquete de; 

/ * 
transición ascendente debe ser seguro, no hay problema, a la derecha. Pero también hay un lado negativo: 
el objeto de transición hacia arriba una vez que la clase padre, entonces no se puede llamar una subclase del contenido original único. 

Solución: abatido con el objeto [reducción]. 
 * / 
Demo01Main Clase pública { 

    public static void main (String [] args) { 
        // objeto transición hacia arriba, es: las referencias al objeto clase padre. 
        animales Animal = new Cat (); // creado originalmente cuando un gato 
        animal.eat (); // peces gato 

// animal.catchMouse (); // error de escritura! 

        // abatido, la "restauración" acción 
        CAT Cat = (gato) Animal; 
        cat.catchMouse (); // gato y el ratón 

        // Aquí está abatido mal 
        // hubiera sido nuevo cuando un gato, ahora los perros tienen que asumir 
        // error de escritura! Compilador no se da, pero la operación será anormal: 
        // java.lang.ClassCastException, clase fundido excepción  
        de perro Perro = (perros) animales;
    } 

}

1.5 ¿Cómo puede un padre conocer los objetos referenciados, lo que podría haber sido una subclase

cn.itcast.day10.demo06 Pena paquete de; 

/ * 
¿Cómo puede saber un padre los objetos referenciados, lo que podría haber sido una subclase? 
Formato: 
Objeto Nombre de la clase instanceof 
Este resultado será un valor booleano, que se determina como los objetos anteriores pueden escribir los siguientes casos. 
 * / 
Demo02Instanceof Clase pública { 

    void Main (args String []) {public static 
        Animal = nuevo perro nuevo (); // podría haber sido un perro 
        animal.eat (); // perro come MIERDA 

        // Si desea intercambiar con niño los métodos de clase-específicas requieren abatido 
        // determinar qué animal referencia clase padre no originalmente Dog 
        IF (la instanceof perro animal) { 
            perro perro = (perros) animales; 
            dog.watchHouse (); 
        } 
        // determinar qué animal no es originalmente Cat 
        IF (Animal el gato instanceof) { 
            cat = CAT (CAT) Animal;
            cat.catchMouse (); 
        } 

        GiveMeAPet (nuevo perro ()); 
    } 

    Static public void giveMeAPet (animal Animal) { 
        si (animal instanceof perro) { 
            perro perro = (perros) animales; 
            dog.watchHouse (); 
        } 
        Si (animal instanceof Cat) { 
            cat cat = (Cat) de los animales; 
            cat.catchMouse (); 
        } 
    } 

}

  

 

Supongo que te gusta

Origin www.cnblogs.com/yzg-14/p/12595655.html
Recomendado
Clasificación