class parent{
}
class child extends parent{
}
class grandson extends child{
}
class Animal
{
}
class Cat extends Animal
{ public void testAnimal(child a)
{
System.out.println("Red");
}
}
class BlackCat extends Cat
{ public void testAnimal(parent a)
{
System.out.println("Green");
}
}
public class test
{
public static void main(String[] args)
{ BlackCat c = new BlackCat();
c.testAnimal(new grandson()); //29
c.testAnimal(new child()); //30
}}
20和30 这两行代码为什么会编译出错?如果将Cat类和BlackCat类中的两个方法换个位置,如下
class Cat extends Animal
{
public void testAnimal(parent a)
{
System.out.println("Red");
}
}
class BlackCat extends Cat
{ public void testAnimal(child a)
{
System.out.println("Green");
}
}
其他都不变,为什么就不会编译出错,谁能给我解释一个理由,代码很简单,希望大家看仔细了再回答问题。
不知道这个问题以前有人问过没有,如果没有,希望和大家一起讨论和学习。
}
class child extends parent{
}
class grandson extends child{
}
class Animal
{
}
class Cat extends Animal
{ public void testAnimal(child a)
{
System.out.println("Red");
}
}
class BlackCat extends Cat
{ public void testAnimal(parent a)
{
System.out.println("Green");
}
}
public class test
{
public static void main(String[] args)
{ BlackCat c = new BlackCat();
c.testAnimal(new grandson()); //29
c.testAnimal(new child()); //30
}}
20和30 这两行代码为什么会编译出错?如果将Cat类和BlackCat类中的两个方法换个位置,如下
class Cat extends Animal
{
public void testAnimal(parent a)
{
System.out.println("Red");
}
}
class BlackCat extends Cat
{ public void testAnimal(child a)
{
System.out.println("Green");
}
}
其他都不变,为什么就不会编译出错,谁能给我解释一个理由,代码很简单,希望大家看仔细了再回答问题。
不知道这个问题以前有人问过没有,如果没有,希望和大家一起讨论和学习。
c.testAnimal((child)new grandson()); //29
c.testAnimal((parent)new child()); //30
如c.testAnimal((child)new grandson()); 那么就选择Cat类里边的方法...
"test.java": reference to testAnimal is ambiguous; both method testAnimal(imsmap.child) in imsmap.Cat and method testAnimal(imsmap.parent) in imsmap.BlackCat match at line 42, column 7
我把我发帖子的程序又拷贝下来执行的,我写的没有错。
这好像是个协变和反协变的问题