This question already has answers here:
Why does Java and C# differ in oops?
(2个答案)
7年前关闭。
我有两个类A和B,其中B是从A派生的。
这两个类都有一个具有相同签名的方法。它们在Java和C#中以以下方式调用->
如果是JAVA:
该程序生成以下输出:-
如果是C#:
该程序生成以下输出:-
为什么输出不同?
(2个答案)
7年前关闭。
我有两个类A和B,其中B是从A派生的。
这两个类都有一个具有相同签名的方法。它们在Java和C#中以以下方式调用->
如果是JAVA:
class A
{
public void print()
{
System.out.println("Inside Parent");
}
}
class B extends A
{
public void print()
{
System.out.println("Inside Child");
}
}
class test4
{
public static void main(String args[])
{
B b1=new B();
b1.print();
A a1=new B();
a1.print();
}
}
该程序生成以下输出:-
Inside Child
Inside Child
如果是C#:
class A
{
public void print()
{
System.Console.WriteLine("Inside Parent");
}
}
class B : A
{
public void print()
{
System.Console.WriteLine("Inside Child");
}
}
class Program
{
public static void Main(string[] args)
{
B b1=new B();
b1.print();
A a1=new B();
a1.print();
System.Console.Read();
}
}
该程序生成以下输出:-
Inside Child
Inside Parent
为什么输出不同?
最佳答案
在Java中,默认情况下方法为virtual
。
在C#中,默认情况下方法不是virtual
。
因此,为了使C#代码的行为与Java代码相同,请在基类中使方法virtual
在派生类中使方法override
。
或者,为了使Java代码的行为与C#代码相同,请在基类中使用final
方法。
10-07 12:41