为什么Java和C#在oops方面有所不同?
发布时间:2020-05-24 16:46:40 所属栏目:Java 来源:互联网
导读:1)为什么以下代码不同. C#: class Base{ public void foo() { System.Console.WriteLine(base); }}class Derived : Base{ static void Main(string[] args) { Base b = new Base(); b.foo();
|
1)为什么以下代码不同. C#: class Base
{
public 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 new void foo()
{
System.Console.WriteLine("derived");
}
}
Java的: class Base {
public void foo() {
System.out.println("Base");
}
}
class Derived extends Base {
public void foo() {
System.out.println("Derived");
}
public static void main(String []s) {
Base b = new Base();
b.foo();
b = new Derived();
b.foo();
}
}
2)当从一种语言迁移到另一种语言时,我们需要确保顺利过渡. 解决方法原因是在Java中,默认情况下方法是虚拟的.在C#中,必须明确标记虚拟方法.以下C#代码等同于Java代码 – 请注意在基类中使用virtual并在派生类中重写: 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#代码隐藏了Derived类中的方法foo.这是您通常不想做的事情,因为它会导致继承问题. 使用您发布的类,以下代码将输出不同的内容,尽管它始终是相同的实例: Base b = new Derived(); b.foo(); // writes "base" ((Derived)b).foo(); // writes "derived" 我在上面提供的固定代码将在两种情况下输出“派生”. (编辑:安卓应用网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
