Thanks, this is a good catch.
In Objo, Override is intended to be a method modifier, not part of the method name. In raw source form it should read:
Override Function ToString() As String
Return "..."
End Function
or, with an explicit scope:
Public Override Function ToString() As String
Return "..."
End Function
Studio’s method editor currently exposes scope, shared, async, return type, etc., but not Override, so entering Override ToString in the name field is understandably confusing. A checkbox/toggle for Override in the method metadata panel is the right fix.
On the design point: I agree that silent hiding/shadowing is not something I want. The intended model is explicit overrides. The compiler already rejects ordinary superclass method hiding without Override, but your ToString() example exposes an inconsistency around methods inherited directly from Object. I will make that consistent too, so overriding Object.ToString() is explicit and discoverable.
I’ll accept this as a Studio improvement and add an Override checkbox to method metadata, preserve it in generated declarations, and tighten/clarify the compiler/docs behaviour around Object methods such as ToString().
https://feedback.objo.dev/bug/520