> This sounds interesting but it breaks some expectations.
>
> Interesting because you can have any class act as an interface for other classes with the interface being built up of any public properties or method that exists on that class.
In my original suggestion, it's not like any class, but only those you
specifically mark as `class interface`, not just `class`. Closer to
the end of my idea I also suggest that maybe it's worth it to allow
implementing, like interfaces, ANY classes, not only those
specifically marked with the new syntax, but this indeed brings up
some issues.
> Ok, maybe not any class but just a final class.
I see no issue there of allowing to reimplement the interface of a
non-final class. This still is better than extending from it IMO. But
we _probably_ should prohibit it from abstract classes.
> And also maybe just a final class that doesn't yet implement an interface.
Also, here is no conflict as well. When reimplementing the interface
of the class, you can treat it as a normal interface - which can
extend from other interfaces.
> The expectation it breaks is that if you have a final class, whenever you use it, you expect some specific implementation exists on it.
> And this would break the expectation and in real life someone might pass a totally different implementation.
> Will not break generic LSP but still will break some expectations.
That's why a new syntax is brought up. This expectation might indeed
break if we allow to reimplement any existing final class, instead of
requiring a manual opt-in.
(sorry, this email is sent to you the second time, Alexandru, because
I forgot to reply to the maillist as well)
Regards,
Illia / somenitko