【发布时间】:2014-05-05 05:37:06
【问题描述】:
我是 C# 的新手,所以如果我的问题听起来很愚蠢,请原谅我的无知。
- 我在尝试Inheritancefunda 和C#,发现它的行为有些奇怪,所以我想用Java 进行检查,我得到了我的预期结果。
-我只是想知道这里有什么我遗漏的......
C# 代码:
class Animal
{
public void Sound()
{
System.Console.WriteLine("I don't make any sound");
}
}
class Dog : Animal
{
public void Sound()
{
System.Console.WriteLine("barking");
}
}
class InheritTest
{
static void Main()
{
Animal a = new Dog(); // Implicit conversion
Dog d = (Dog) a; // Explicit conversion
a.Sound();
d.Sound();
}
}
输出:
I don't make any sound
barking
JAVA 代码:
class Animal
{
public void sound()
{
System.out.println("I don't make any sound");
}
}
class Dog extends Animal
{
public void sound()
{
System.out.println("barking");
}
}
class InheritTest
{
public static void main(String[] args)
{
Animal a = new Dog(); // Implicit conversion
Dog d = (Dog) a; // Explicit conversion
a.sound();
d.sound();
}
}
输出:
barking
barking
- 现在我对整个情节的怀疑是......在C# 中,我将Dog object 分配给Animal 类型的对象引用变量a,然后当我调用方法时Sound() 在a 上,我应该得到barking 的输出(这是Dog 类中的重写方法),而是调用Animal's Sound() 方法,将输出作为I don't make any sound。
- 但是在Java 中,事情按预期工作.. 继承在任何地方都以相同的方式工作,所以我哪里出错了。
如果有人可以帮助我,我将不胜感激......在此先感谢。
【问题讨论】:
标签: c# java inheritance implicit-conversion explicit-conversion