class Mouse
{
private int number;
Mouse(int i)
{
number=i;
}
public String toString()
{
return "Number is :"+number;
}
public int getNumber()
{
return number;
}
}class MouseTrap
{
public static void Change(Object ob)
{
Mouse mouse=(Mouse)ob;
System.out.println("Mouse Number :"+mouse.getNumber());
}
}class MouseListTest
{
public static void main(String[] args)
{
MouseList mouse=new MouseList();
for(int i=0;i<3;i++)
{
mouse.MYadd(new Mouse(i));
}
for(int x=0;x<mouse.MYsize();x++)
{
MouseTrap.Change(mouse.MYget(x));
}
}
}
MouseTrap.Change(mouse.MYget(x));这句中的mouse.MYget(x)返回了一个Mouse对象,传给了Change()方法中的形参Ojbect变量ob,这就表示Ojbect变量ob指向了子类Mouse对象:Object ob=new Mouse(),那么为什么不能直接用ob调用getNumber()方法.
呢?
传给Change()方法的形参就是一个Mouse对象,为什么还要在Change()方法中重新强制转换一次类型呢?Mouse mouse=(Mouse)ob;

解决方案 »

  1.   

    你知道传进来的实际上是Mouse对象,编译器可不知道。
    而且又怎么保证一定是Mouse对象呢?这段程序从逻辑上并不禁止如
    String s="xxx";
    MouseTrap.Change(s);
    这样的调用的。
      

  2.   

    多态,有没有好好看?
    比如父类门,其下有子类防盗门和铁皮门。防盗门有open方法(推),铁皮门也有open方法(拉)。不强制转换就只知道是父类门要open,而不知道要推还是要拉啊。
    例子不恰当。你还是好好看看书吧。
      

  3.   

    楼主的代码中都没有体现子类和父类啊,是不是extends忘写了??
    如果有继承才会有上转型~~~