And if each of the case classes need to override methods defined in
No idea, I have never need to override something in the real sense of OOP. For me or it is abstract or final; and that basic behavior works out of the box.
And what happens which such a method calls
Again, no idea, never need to call a super method.
Why don’t you give it a try with a small POC and come back here to tell use how it goes.
I know that for some people that would be valuable knowledge.
However, truth is that IMHO what you want reflects a bad design.
ADTs are intended to be simple holder of data with some auxiliary methods, nothing more.
As such, most of us haven’t need to split them into multiple files since they are usually short.
For many of us having complex logic inside an ADT is simply a bad design; I personally would move all your operations into a different object.