C# 为什么Java和C在oops方面有所不同?
1) 为什么以下代码不同 C#:C# 为什么Java和C在oops方面有所不同?,c#,java,oop,C#,Java,Oop,1) 为什么以下代码不同 C#: 类基 { 公共图书馆 { System.Console.WriteLine(“基本”); } } 派生类:基 { 静态void Main(字符串[]参数) { 基b=新基(); b、 foo(); b=新派生的(); b、 foo(); } 公众新富() { System.Console.WriteLine(“派生”); } } 爪哇: 类基{ 公共图书馆{ System.out.println(“基”); } } 类派生的扩展基{ 公共图书馆{ Syst
类基
{
公共图书馆
{
System.Console.WriteLine(“基本”);
}
}
派生类:基
{
静态void Main(字符串[]参数)
{
基b=新基();
b、 foo();
b=新派生的();
b、 foo();
}
公众新富()
{
System.Console.WriteLine(“派生”);
}
}
爪哇:
类基{
公共图书馆{
System.out.println(“基”);
}
}
类派生的扩展基{
公共图书馆{
System.out.println(“派生”);
}
公共静态void main(字符串[]s){
基b=新基();
b、 foo();
b=新派生的();
b、 foo();
}
}
2) 当从一种语言迁移到另一种语言时,我们需要确保平稳过渡。原因是在Java中,默认情况下方法是虚拟的。在C#中,虚拟方法必须显式标记为虚拟方法。
以下C#代码相当于Java代码-注意在基类中使用
virtual
,在派生类中使用override
:
class Base
{
public virtual void foo()
{
System.Console.WriteLine("base");
}
}
class Derived
: Base
{
static void Main(string[] args)
{
Base b = new Base();
b.foo();
b = new Derived();
b.foo();
}
public override void foo()
{
System.Console.WriteLine("derived");
}
}
您发布的C代码隐藏了类派生的中的方法foo
。这是您通常不想做的事情,因为它会导致继承问题
使用您发布的类,以下代码将输出不同的内容,尽管它始终是同一个实例:
Base b = new Derived();
b.foo(); // writes "base"
((Derived)b).foo(); // writes "derived"
我上面提供的固定代码在这两种情况下都将输出“派生的”。C#代码将编译时带有警告,因为您将方法隐藏在那里
在Java中,类方法始终是虚拟的,而在C#中则不是,因此必须将它们显式标记为“虚拟”
在C#中,您必须执行以下操作:
public class Base
{
public virtual void Foo()
{
Console.WriteLine ("Base");
}
}
public class Derived : Base
{
public override void Foo()
{
Console.WriteLine ("Derived.");
}
}
你的问题到底是什么?代码是不同的,因为它不是相同的语言。这个答案还不够吗?这个问题和家庭作业有什么不同?@Filburt:看看答案。这不是家庭作业问题显然Java有更多面向对象的功能!,它是较早开发的。这是任何的哦!你应该关心。@Filburt,你所要做的就是看看这个家伙的个人资料——我不认为一个有40个问题和130个答案的人是学校里试图完成家庭作业的人——我认为这只是一个措辞糟糕的人