Xojo fits the bill. A couple cool features:
Create a new class called Animal. Add to it a Speak method that returns String with this code:
Return SpeakSound
Now add to the Animal class an Event Definition called SpeakSound and set its return value to String.
Next, create a subclass of Animal, called Cat. Click on the button “+” button on the toolbar and select “Add Event Handler”. In the dialog, you will see the SpeakSound event handler. Select and and press OK. The code for this event handler is:
Return "Meow!"
Create another subclass of Animal, called Dog, and also add the SpeakSound event handler with this code:
Return "Woof!"
To test this, create a button on a window. In the Action event of the button add code to create an array of Animals:
Dim animals() As Animal
animals.Append(New Cat)
animals.Append(New Dog)
For Each a As Animal In animals
MsgBox(a.Speak)
Next
When you run this code, you will see “Meow!” and then “Woof!”.