Von Kind-Instanz aufrufen Basisklasse Methode, die überschrieben wurde
Betrachten Sie den folgenden code:
Public Class Animal
Public Overridable Function Speak() As String
Return "Hello"
End Function
End Class
Public Class Dog
Inherits Animal
Public Overrides Function Speak() As String
Return "Ruff"
End Function
End Class
Dim dog As New Dog
Dim animal As Animal
animal = CType(dog, Animal)
// Want "Hello", getting "Ruff"
animal.Speak()
Wie kann ich umwandeln/ctype die Instanz von Hund zu Tier und Tier.Sprechen Holen Sie genannt?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Nicht; in der Subklasse die Methode der Superklasse überschreibt die Methode, durch die definition von Vererbung.
Wenn Sie möchten, dass die überschriebene Methode verfügbar sein, setzen es in die Unterklasse, z.B.
Ich würde Fragen, warum Sie versuchen, diese Art von Verhalten. Es scheint mir, dass die Tatsache, die Sie benötigen zum aufrufen des parent-Klasse " Implementierung einer Methode ist ein Hinweis darauf, dass man ein design-Fehler irgendwo anders im system.
Unteren Linie aber, wie die anderen gesagt haben es gibt keinen Weg zum aufrufen der übergeordneten Klasse " Umsetzung angesichts der Art und Weise, die Sie haben, strukturiert Ihre Klassen. Jetzt innerhalb der Dog-Klasse könnte man sagen
die würde berufen, der übergeordneten Klasse Umsetzung, aber von außerhalb der Dog-Klasse gibt es keine Möglichkeit, es zu tun.
Ich glaube nicht, dass Sie können.
Die Sache ist, dass das Objekt ist immer noch ein Hund. das Verhalten, das du beschreibst (immer "ruff" aus dem gegossenen Objekt, anstatt "Hallo") ist standard, weil Sie wollen, um der Lage sein, die animal-Klasse, um zu lassen Sie eine Reihe von verschiedenen Arten von Tieren sprechen.
Zum Beispiel, wenn Sie hatte eine Dritte Klasse als so:
Dann würden Sie in der Lage sein, um Ihnen den Zugang wie so:
Wovon du redest, tut im Grunde unterbricht die Vererbungskette. Nun, diese kann getan werden, indem die Sprechen Funktion akzeptiert einen parameter, der sagt wieder es ist Basis Wert oder nicht oder durch einen separaten SPRECHEN-Funktion für den base-Wert, aber out of the box, du wirst doch nicht um die Dinge, die sich so benehmen.
Ich denke, dass, wenn Sie drop "Overridable" und ändern Sie "Überschreibt", um "Neue" bekommen Sie, was Sie wollen.
Ich weiß, dies wurde gebucht ein paar Monate zurück, aber ich werde trotzdem versuchen zu Antworten, vielleicht auch nur der Vollständigkeit halber.
Haben Sie gesagt, dass Sie Zugang zu der überschriebenen Methode aus innerhalb die
dog
Klasse, und dass Sie können, dann setzen Sie es mit einem anderen Namen. Aber was ist mit einer bedingten?Können Sie nur:
Und dann rufen Sie gerne:
Alternativ können Sie
getTheAnimalInTheDog
und machen esSpeak()
:Können Sie nur:
Und dann wieder:
Hoffe es hilft 😉