C#多态 与 java多态到底相同么?
hanxu 2009-02-10 09:11:55 下面是csdn java板块的一个热帖:
写出以下代码的输出结果
class A{
public String f(D obj){return ("A and D");}
public String f(A obj){return ("A and A");}
}
class B extends A{
public String f(B obj){return ("B and B");}
public String f(A obj){return ("B and A");}
}
class C extends B{}
class D extends B{}
class test{
A a1 = new A();
A a2 = new B();
B b = new B();
C c = new C();
D d = new D();
System.out.println(a1.f(b)); A and A
System.out.println(a1.f(c)); A and A
System.out.println(a1.f(d)); A and D
System.out.println(a2.f(b)); B and A
System.out.println(a2.f(c)); B and A
System.out.println(a2.f(d)); A and D
System.out.println(b.f(b)); B and B
System.out.println(b.f(c)); B and B
System.out.println(b.f(d)); A and D
}
我把这个例子改写成了C#的 代码如下:
class test
{
static void Main(string[] args)
{
A a1 = new A();
A a2 = new B();
B b = new B();
C c = new C();
D d = new D();
Console.WriteLine(a1.f(b)); // A and A
Console.WriteLine(a1.f(c)); // A and A
Console.WriteLine(a1.f(d)); // A and D
Console.WriteLine(a2.f(b)); // A and A
Console.WriteLine(a2.f(c)); // A and A
Console.WriteLine(a2.f(d)); // A and D
Console.WriteLine(b.f(b)); // B and B
Console.WriteLine(b.f(c)); // B and B
Console.WriteLine(b.f(d)); // B and B
}
}
class A
{
public String f(D obj) { return ("A and D"); }
public String f(A obj) { return ("A and A"); }
}
class B : A
{
public String f(B obj) { return ("B and B"); }
public String f(A obj) { return ("B and A"); }
}
class C : B { }
class D : B { }
屏幕输出语句后面的是输出结果,发现java和C#版的输入结果不完全相同,想知道原因?谢谢赐教