And Alexander Jerusalem has an interesting comment in the comments to the above: You have a completely different situation when you differentiate between asserted class membership and inferred class membership. For example you could define the class OverdrawnBankAccount as all instances of BankAccount that have a balance < 0. It would't make sense to assert the membership of any object to this class at the time of object creation. The membership can only be inferred by looking at the balance at some point in time.

That's interesting. I wonder if there are any languages where you can declare a class as a test on an object? (Like a trigger in SQL?)

From another comment ... a link to a paper on DynamicInterfaces

See also SelfLanguage, WaterLanguage, ProthonLanguage, JavascriptLanguage, AspectOrientedProgramming