多态
多态:同一种方法,不同对象行为完全不同
多态的要点
- 多态是方法的多态,不是属性的多态(多态与属性无关)》
- 多态的存在要有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(); //可以出现多态
}
}
对象的向上向下转型
- 父类引用指向子类对象,称这个过程为向上转型,属于自动类型转型。
- 向上转型后的父类变量只能调用它编译类型的方法,不能调用它运行时类型的方法。这时,需要进行类型的强制转换,成为向下转型