多态:同一方法因对象的不同而产生的不同形态
多态存在的**3个必要条件:**继承、方法的重写、父类引用指向子对象。
父类引用指向子对象后,用该父类引用子类重写的方法,此时多态就出现了。
非静态成员和成员方法
引用成员变量的口诀:编译看左边,运行看左边
引用成员方法的口诀:编译看左边,运行看右边
静态成员和成员方法
静态成员和成员方法:编译看左边,运行也看左边
public class Animal {
public void shout(){
System.out.println("叫了一声");
}
}
class Dog extends Animal{
@Override
public void shout() {
System.out.println("汪汪汪");
}
}
class Cat extends Animal{
@Override
public void shout(){
System.out.println("喵喵喵");
}
}
public class TestPloy {
static void animalcry(Animal a){
a.shout();
}
public static void main(String[] args) {
Dog d = new Dog();
animalcry(d);
animalcry(new Cat());
}
}
对象的转型
//测试类型的转换
Animal a = new Dog(); //向上类型转换,自动的
// a.seeDoor();
Dog d2 = (Dog) a; //强制类型转换,向下类型转型
d2.seeDoor();
// Cat c3 = (Cat) a; //java.lang.ClassCastException
// c3.catchMouse(); //转型异常
if(a instanceof Dog) {
Dog d3 =(Dog) a;
d3.seeDoor();
}else if(a instanceof Cat) {
Cat c4 = (Cat) a;
c4.catchMouse();
}