C#多态 与 java多态到底相同么?
下面是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#版的输入结果不完全相同,想知道原因?谢谢赐教
写出以下代码的输出结果
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#版的输入结果不完全相同,想知道原因?谢谢赐教
...全文
相关推荐
Java,C#,C++在继承,覆盖和多态,抽象类等几个方面的比较归纳
Java,C#,C++在继承,覆盖和多态,抽象类等几个方面的比较归纳..........................
JAVA与C#的区别
JAVA与C#的区别,JAVA与C#运用层面 以及试用场景。和语法的区别
JAVA与C#相同与区别.pdf
JAVA与C#相同与区别.pdf
接口的多态实现
接口多态的实现,引用,对于初学者是一份比较好的课程文件
C#类的多态性详解
第一种:编译时的多态性,直接这样说不知道说啥?程序执行过程主要分为三步:编译,链接,运行。在编译时体现的多态性是通过方法的重载来实现的。方法的重载我们听过,就是一个类对象调用若干同名,但参数类型、个数不同。类对象是根据参数类型,个数来决定调用哪个同名方法,实现何种操作。C#语言的方法重载与C++、java基本是一样的,但是C#还包含C++的运算符重载,java里面没有这个概念。 第二种:运行时的多态性,是在系统运行时,调用一个名字相同,参数类型也相同以及个数也完全一样的方法,但会完成不同的操作。C#运行时的多态性通过虚方法实现。在类方法声明加上了virtual修饰符,称为虚方法,反之为非虚方法


