【发布时间】:2015-05-19 10:17:15
【问题描述】:
假设我有以下代码:
Class NormalEmployee
Protected pay As Decimal;
Protected Shared basePay As Decimal = 300D
Protected Overridable Sub UpdatePay()
pay = basePay + .....do something......
End Sub
End Class
Class SeniorNormalEmployee
Inherits Normal Employee
Protected Shared Shadows basePay As Decimal = 500D;
Protected Overrides Sub UpdatePay()
pay = basePay + .....do something different....
End Sub
End Class
Function Main() As Integer
Dim newEmployee As NormalEmployee = New SeniorNormalEmployee()
newEmployee.CalculatePay()
return 0
End Function
我知道由于多态性,我的基类中的 CalculatePay() 将被调用。我的问题是:为什么 CalculatePay() 使用基类中的 basePay 而不是派生类?该对象存储在基类“容器”中,因此即使它使用方法的派生类版本,当它检查 basePay 时,它不应该查看基类的版本吗?
此外,从覆盖方法调用阴影方法时,这种行为是否相同?有什么方法可以使字段“可覆盖”?
感谢您的帮助!
【问题讨论】:
-
我还应该补充一点,我知道程序设计并不出色,但是由于分配要求,这是我坚持的设计。另外,我只是把这段代码作为一个简短的例子,所以如果有任何错误或缺少语法,我深表歉意。