爲了更多地理解多態性,我構建了一個小測試,它返回了意想不到的結果。多態性意想不到的結果
所以這個想法是用虛擬/覆蓋關鍵字覆蓋基類的方法,但似乎我不需要這些?
public class Employee
{
public Employee()
{
this.firstName = "Terry";
this.lastName = "Wingfield";
}
public string firstName { get; set; }
public string lastName { get; set; }
public void writeName()
{
Console.WriteLine(this.firstName + " " + this.lastName);
Console.ReadLine();
}
}
public class PartTimeEmployee : Employee
{
public void writeName()
{
Console.WriteLine("John" + " " + "Doe");
Console.ReadLine();
}
}
public class FullTimeEmployee : Employee
{
public void writeName()
{
Console.WriteLine("Jane" + " " + "Doe");
Console.ReadLine();
}
}
static void Main(string[] args)
{
Employee employee = new Employee();
PartTimeEmployee partTimeEmployee = new PartTimeEmployee();
FullTimeEmployee fullTimeEmployee = new FullTimeEmployee();
employee.writeName();
partTimeEmployee.writeName();
fullTimeEmployee.writeName();
}
}
利用上述我期待的代碼導致像這樣:
- 特里Wignfield
- 特里溫菲爾德
- 特里溫菲爾德
但代替下面被寫入到控制檯:
- 特里溫菲爾德
- 李四
- 李四
我認爲後者是行不通的,因爲這將所需要的ovrride關鍵字。
所以問題是爲什麼我看到沒有適當的關鍵字後面的名字?
我希望這是足夠清晰的閱讀。
問候,
這是因爲'writeName()'的子類是_hiding_基類的版本(你應該已經看到了編譯器警告這個)。如果你把所有三個都投入到'員工'中,你應該看到第一個結果。 – JLRishe 2014-08-27 13:51:48
@JLRishe非常感謝你的讚賞。 – 2014-08-27 18:41:13