本质:父类的引用指向了子类的对象(挟天子以令诸侯)
比如
Animal animal = new Dog();
你甚至可以
Object obj = new Dog();
特点:
编译类型看左边,运行类型看右边(也就是从右边的那个子类开始向上找)
可以调用父类的所有成员(但是前提是需要遵循访问权限)
不能调用子类的特有成员
最终运行效果看子类的具体实现
向下转型
语法:子类类型 引用名字 = (子类类型)父类引用;
Cat cat = (Cat)Animal;
比如上面的代码,直接从父类里面引用了个Cat出来
只能强转父类的引用,不能强转父类的对象
要求父类的引用必须指向的是当前的目标类型的对象
可以调用子类类型中所有的成员