多态即多种形态,通俗来讲就像一个人有不同身份,比如说人:生物,地球人,中国人,学生,等等。
使用多态的前提:
1.必须有子父类关系 (必须有继承)
2.必须有方法的重写
多态在java中表现形式:
父类类型 变量名 = new 子类类型();
即父类类型的变量 指向了 子类的对象
多态调用成员变量时,编译运行都看父类
多态调用成员方法时,编译看父类 运行看子类
在这里说一下在多态中的重要的知识点:向下转型和向上转型。多态就是向上转型
使用了多态后,可以调用该子类重写了父类的方法,但是子类特有的方法是不能调用的(多态的弊端)
解决多态的这个弊端的办法是向下转型,也就是进行强制类型转换
向下转型也有弊端:
把父类的变量 转成子类类型的时候 编译器会直接编译通过,但是编译运行的时候会报错
比如说下面代码写的时候是没有问题的,运行后报错:Dog cannot be cast to Cat
package com.polymorphic.test; public class polymorphictest { public static void main(String[] args) { Animal an = new Dog(); //一个类型是animal的Dog feedanimal.feedanimal(an); Cat cc =(Cat)an; //向下强制转型成cat,实际上an是Dog cc.catchmouse(); } }
java中解决向下转型弊端的方法:
一个关键字 instanceof 运算符
作用: 判断某一个变量 是不是 该类的类型
即在转换前做一个类型判断
比如:
package com.polymorphic.test; public class polymorphictest { public static void main(String[] args) { Animal an = new Dog(); feedanimal.feedanimal(an); if(an instanceof Dog){ Dog dd =(Dog)an; dd.WatchHome(); dd.eat(); } if(an instanceof Cat) { Cat cc =(Cat)an; cc.catchmouse(); } }