面向对象之多态,对象的向上向下转型

51 阅读1分钟

多态

多态:同一种方法,不同对象行为完全不同

多态的要点

  1. 多态是方法的多态,不是属性的多态(多态与属性无关)》
  2. 多态的存在要有3个必要条件;继承,方法重写,父类对象引用指向子类对象。
  3. 父类引用指向子类对象后,用该父类引用调用子类重写的方法,此时多态就出现了

练习:

package com.itbaizhan.polymorphism;

public class Animal {
    public void short() {
        System.out.println("叫了一身");
    }
}
class Dog extends Animal{//继承父类
    public void short(){System.out.println("汪汪汪!");}//重写short方法
    public void seeDoor(){System.out.println("看门中……");}//加了一个自己的方法
}
class Cat extends Animal{
    public void short(){System.out.println("喵喵喵!");}//重写short方法

    public void catahMouse(){
        System.out.println("抓老鼠中……");
    }
}
package com.itbaizhan.polymorphism;
//测试多态,多态中必然存在继承和重写
public class TestPolym {
    public static void main(String[] args) {
//      animalCry(new Dog)());
//      animalCry(new Cat());
        Animal animal = new Animal();//父类引用执行子类对象,向上转型(自动)
        animal.shout();
        Dog d = (Dog) animal;//向下转型(强制)
        d.seeDoor();
    }
    static void animalCry)(Animal a){
        System.out.println("Testpoiym.animalCry");
        a.shout(); //可以出现多态

    }
}

对象的向上向下转型

  1. 父类引用指向子类对象,称这个过程为向上转型,属于自动类型转型。
  2. 向上转型后的父类变量只能调用它编译类型的方法,不能调用它运行时类型的方法。这时,需要进行类型的强制转换,成为向下转型