关于多态
Java的特性之一 多态 很多小伙伴搞不懂,问这个问题。尤其是很多初学者,觉得别扭。我总结个例子,大家看一看吧~
看看向上转型:
package com.toov5.Reordering; class Person{ public void print(){ System.out.println("吃喝拉撒"); } } class SuperMan extends Person{ public String fly(){ return "飞起来~~~"; } } public class Test { public static void main(String[] args) { Person person = new SuperMan(); //向上转型 SuperMan pMan = (SuperMan) person; System.out.println(pMan.fly()); } }
向上转型描述的是一些公共特征。而向下描述的是子类自己特殊的定义环境。向下转型不一定是安全的啊,因为在进行向下转型之前一定要首先发生向上转型
package com.toov5.Reordering; class Person{ public void print(){ System.out.println("吃喝拉撒"); } } class SuperMan extends Person{ public String fly(){ return "飞起来~~~"; } } public class Test { public static void main(String[] args) { Person person = new Person(); //不转型 // Person person = new SuperMan();//向上转型 SuperMan pMan = (SuperMan) person; System.out.println(pMan.fly()); } }
这样必然报错
所以注意了啊。只要发生对象的向下转型之前,一定要首先发生向上转型,两个没有任何关系的实例如果要发生强制转换,那么就会出现异常。所以向下转型不一定安全呀
转型之前要进行判断 判断某个实例是否是某个类的对象 使用 instanceof 进行
package com.toov5.Reordering; class Person{ public void print(){ System.out.println("吃喝拉撒"); } } class SuperMan extends Person{ public String fly(){ return "飞起来~~~"; } } public class Test { public static void main(String[] args) { Person person = new SuperMan(); System.out.println(person instanceof Person); System.out.println(person instanceof SuperMan); } }
结果
如果要进行向下转型 最好要判断判断啊 老铁 别着急
所以这么玩儿
转型之前要规范!!
public class Test { public static void main(String[] args) { Person person = new SuperMan(); if (person instanceof SuperMan) { SuperMan superMan =(SuperMan)person; System.out.println(superMan.fly()); } } }
结果: