本帖最后由 tangxiaobo1991 于 2014-2-13 15:37 编辑
小弟刚学到的多态的部分,看了老毕的视频,也基本了解,可是还是发现了一个很奇怪的现象,希望哪位老马能够帮帮新马。看看下面我写的代码。
abstract class Animals
{
abstract void eat();
}
class Cat extends Animals
{
public void eat()
{
System.out.println("eat fish");
}
public void catchMouse()
{
System.out.println("catch Mouse");
}
}
class DuoTai
{
public static void main(String[] args)
{
Animals a=new Cat();
Cat c=(Cat)a;
c.catchMouse();
function(a);
function(c);//?????
}
public static void function(Animals A)
{
A.eat();
}
}
问题:看上面代码红色部分,我已经把a强制转换成Cat类型了,故c应该是Cat类型。而function(Animals A)中传递的参数是父类Animals类型,编译应该失败,可奇怪的是竟然编译成功并且运行成功。这是为森马呢?下面是运行结果
|