我用Java编写了这个示例。
public class Person {
public static void ShowInfo() {
System.out.println("I am Person");
}
}
public class Student extends Person {
public static void ShowInfo() {
System.out.println("I am Student");
}
}
当我运行此代码时:
Person person = new Student();
person.ShowInfo();
为什么我会获得I am Person
?
答案 0 :(得分:2)
很简单。在Java中,派生类是隐式多态的。在C#中,您需要virtual
和override
个关键字(当使用abstract
类或interface
时)才能获得相同的行为。
虽然要在Java中获得相同的C#“行为”,但您只需在方法签名中的final
关键字上进行标记:
public final void ShowInfo() {
System.out.println("I am Student");
}
我不知道Java中的静态方法是多态的:这是你的实际代码吗?
答案 1 :(得分:1)
对于
我不知道为什么这个答案不适合你。
我想说两件事:
答案 2 :(得分:1)
您所做的不是方法重载而是方法隐藏。静态方法可以在子类中重新定义(具有相同的签名),这称为方法隐藏。调用的静态方法的版本(子类或父类中的版本)取决于引用类型,而不是运行时的实际实例类型。
答案 3 :(得分:0)
Lews Therin(我看到的TWoT的粉丝)是对的:
试着写下这个:
public class Teacher : Person
{
public override void ShowInfo()
{
Console.WriteLine("I am a teacher");
}
}
看看你得到了什么
答案 4 :(得分:0)
在Java中,默认情况下所有方法都是虚拟的。这就是为什么你在Java中获得重写方法(也是默认方法),即使引用属于基类型。