当前位置:编程学习 > JAVA >>

JAVA中关于向上转型的问题

比如我这个程序 public class Testjava{ public static void main(String args[]) { fun(new Student()); fun(new Allen()); } public static void fun(Person p) { p.fun2(); if (p instanceof Student) { Student s=(Student)p; s.fun3(); } if (p instanceof Allen) { Allen a=(Allen)p; a.fungod(); } } } fun3()和fungod()分别是Student类和Allen类里面的方法,我想调用他们的时候为什么要向上转型呢,感觉没什么意义,直接写Student s=new Student()和Allen a=new Allen()各建立一个新对象再调用他们各自特有的方法不就可以了吗?可否详细解释向上转型在JAVA中的意义。我是自学的,麻烦解释详细一点,拜托大家了~~
答案:确实这么先Person p传入,在if instanceof的做法属于误用。实践中肯定不推荐这么写。
应该另外写2个重载方法
 public static void fun(Student p);
 public static void fun(Allen p);
 
 
如果只使用父类中的方法或接口方法,才
public static void fun(Person p)
 
或Java 5以后的泛型
public static void fun<T extends Person>(T p)
其他:java 的四大特性之一:多态,父类引用指向子类对象,你可以查查多态的相关知识。 首先说一下 Allen a=(Allen)p; 不叫向上转型,上转是转成父类型,这个叫强制类型转换,如果转换不对会抛出错误的,提示XXX class can not be casted XXX class;instance of正是做这样的检查。

fun(Person p) 接受参数为Person 类或Person 接口,此时可以接受任何Person的子类型或其实现类,但是你使用p,只能调用到Person所定义的方法,如果想调用到其子类或实现类的方法,则必须转换成他原有的类型。 

上一个:Struts2中<s:textfield>
下一个:MLDN培训怎么样?

CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,