学习多态的基础语法之前先普及两个概念:
第一个:向上转型
子——>父
第二个:向下转型
父——>子
无论是向上还是向下转型,两种类型之间必须有继承关系。
多态指的就是 父类型的引用指向子类型的对象
public class Animal{
public void move(){
System.out.println("动物在移动")
}
}
class Bird extends Animal{
public void move(){
System.out.println("鸟在飞翔")
}
}
class Cat extends Animal{
public void move(){
System.out.println("猫在散步")
}
public void catchMouse(){
System.out.println("猫抓老鼠")
}
}
class AnimalTest{
public static void main(String[] args){
Animal a1 = new Bird(); //父类的引用指向子类的对象
Animal a2 = new Cat(); //编译阶段属于静态绑定,运行阶段属于动态绑定
a1.move();
a2.move();
//a2.catchMouse(); 编译不通过,父类中没有此方法。
Cat y = (Cat)a2; //调用子类中特有的方法,需要向下转型。
y.catchMouse();
}
}
多态表示多种形态:
编译时候一种形态(静态绑定),运行时候另一种形态(动态绑定)。
当需要访问的是子类中“特有”的方法,此时需要向下转型。
运算符instanceof的含义及用法
1.运算符nstanceof可以在运行阶段动态判断引用指向的对象类型
2.运算符instanceof的语法:引用 instanceof 类型
3.运算符instanceof的结果只能是ture/false
4.假设c是一个引用,c变量保存了内存地址指向了堆内存中的对象
假设(c instanceof Cat)为ture 表示:c引用指向的堆内存中的对象是一个Cat
假设(c instanceof Cat)为false 表示:c引用指向的堆内存中的对象不是一个Cat
5.任何时候,对类型进行向下转型时候,一定先使用运算符instanceof进行判断