簡體   English   中英

“父”對象的實例如何使用其子對象的方法/屬性?

[英]How can an instance of a “parent” object use its child object's methods/properties?

看來,“父對象”對象維護着被設置為子對象的“細節”。 雖然這是我實際上想要發生的事情-我不明白為什么會這樣,這使我感到恐懼。

我希望當將新的父對象設置為子對象時,不在父對象中的任何屬性/方法都將丟失/無法訪問。 但是似乎如果我將其設置如下,則不是這樣。 有人可以解釋為什么會發生這種情況嗎?是否適合以此方式使用?

(為一個糟糕的例子而道歉)

給定以下三個類:

Public Class Person

    Public Property FirstName As String
    Public Property LastName As String

    Public Overridable Function WriteStatement() As String
        Return "[Unknown] " & FirstName & " " & LastName
    End Function

End Class

Public Class Man

    Inherits Person
    Public Property gender As String = "Male"

    Public Overrides Function WriteStatement() As String
        Return "[" & gender & "] " & FirstName & " " & LastName
    End Function

End Class

Public Class Woman

    Inherits Person
    Public Property gender As String = "Female"

    Public Overrides Function WriteStatement() As String
        Return "[" & gender & "] " & FirstName & " " & LastName
    End Function


End Class

然后執行代碼:

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click

Dim boy As New Man
Dim girl As New Woman

boy.FirstName = "Scott" : boy.LastName = "Smith"

girl.FirstName = "Jane"
girl.LastName = "Jones"

Dim people As New List(Of Person)
Dim malePerson As New Person
Dim femalePerson As New Person

malePerson = boy
femalePerson = girl

people.Add(malePerson)
people.Add(femalePerson)

For Each p As Person In people
    MsgBox(p.WriteStatement())
Next

'Outputs:
' [Male] Scott Smith
' [Female] Jane Jones
'
'Expected:
' [Unknown] Scott Smith
' [Unknown] Jane Jones

結束子

術語“父母”和“孩子”在這種情況下不合適。 您在說的是基本類型和派生類型。 在談論將對象設置為對象時,您也是錯誤的。 那太荒謬了。 一個對象就是它。 您可以為對象設置變量,但不會改變對象的含義。 OOP旨在模仿現實生活。 如果您將男人或女人放在期望有人的地方,他們會停止成為男人或女人嗎? 不,它們不是,並且編程對象是相同的。 如果類型覆蓋成員,則在該類型的對象上調用該成員將調用該派生實現,無論引用的類型是派生類型還是基類型。 這就是壓倒一切的方式。

您應該在父類中使用它:

public MUSTOVERRIDE class person
Public mustoverride Property gender As String

在子類中:

Public overrides Property gender As String = "Male"

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM