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中的意义。我是自学的,麻烦解释详细一点,拜托大家了

因为你的fun3和fungod都是子类独有的方法,所以你会觉得多态没意义,还要搞个向上转型,
就觉得更没意义了。要体现多态的意义,得如此:
1、Person,定义一个方法,可以使抽象类,比如fun1;
2、Person子类Studen,Allen都实现fun1,也就是把原来fun3,fungod的实现放在fun1里;
3、那么
public static void fun(Person p)
{
p.fun2();
p.fun1();
}
这样就是多态的好处,又去了无趣的向上转型
温馨提示:答案为网友推荐,仅供参考
第1个回答  2012-09-04
在你举的例子中,父类Person包含的意义并没有体现出来。作为一个父类,可以把一些共有的方法提取出来,这样只要在子类实现就可以了,以后学习到设计模式时,可以通过适配模式对子类进行处理特别方便。
第2个回答  2012-09-05
反正是多态吗
相似回答