我有两个班A& B,其中B来自A。
两个类都有一个具有相同签名的方法。它们在Java和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
答案 0 :(得分:16)
在Java中,默认情况下方法为virtual
在C#中,默认情况下,方法不 virtual
。
因此,为了使C#代码的行为与Java代码相同,请在基类中创建方法virtual
,在派生类中创建override
。
或者,为了使Java代码的行为与C#代码相同,请在基类中创建方法final
。
答案 1 :(得分:6)
在c#的情况下,您需要将父方法作为虚拟和子方法作为覆盖
class A
{
public virtual void print()
{
System.Console.WriteLine("Inside Parent");
}
}
class B : A
{
public override 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();
}
}
答案 2 :(得分:2)
这一行:
A a1=new B();
我想在这里,在C#中你有一个方法隐藏的例子。也许你需要显式地将方法声明为重写方法(例如在使用@Override注释的java中)。