java多态,父类的引用指向子类的对象,instanceof函数

多态

多态即事物的多种多样的状态。

1.重载重写都是多态的表现。重载重写此处不再赘述。
2.父类的引用指向子类的对象

下面通过几个实例来详细讲解这个知识点:
(1)定义父类Person
java多态,父类的引用指向子类的对象,instanceof函数
(2)定义子类Student
java多态,父类的引用指向子类的对象,instanceof函数
(3)定义测试类Test
java多态,父类的引用指向子类的对象,instanceof函数
Person person = new Student();这里为是”向上转型“,即父类的引用指向子类的对象。(引用的知识请看前几篇博文,此处不再赘述)。

通过person调用方法调用的是Person类的方法还是Student类?
通过输入person.的提示我们知道要想编译通过,应该调用Person类的方法。如下
java多态,父类的引用指向子类的对象,instanceof函数
编译通过。
java多态,父类的引用指向子类的对象,instanceof函数
运行的是子类重写的方法。

总结:编译的时候看赋值等号的左边,运行的时候看等号右边。

那么怎么才能在Person person = new Student();这句下利用person调用Student类的方法?
答案是”向下转型“,实际上就是强制类型转化,代码如下
java多态,父类的引用指向子类的对象,instanceof函数
这样就OK了。

instanceof函数

下面为这个函数的使用方法例子:
java多态,父类的引用指向子类的对象,instanceof函数
运行中关键在于:
传参Person p = student;然后instanceof检测参数属于Student 类,进入if表达式。这个函数避免了大量重复性检查变量类型 的函数的定义。