Apart from the more convenient auto-complete, my main OOP-issue in julia is the following:
It is very hard to take an existing type MyType, on which a lot of methods are defined, and saying “ok; now I want a AlmostMyType that has the same behavior, except for some few cases that I want to overwrite”.
The reason for this is that people dispatch on the concrete unextendable type MyType. Turning all these methods into ones that dispatch on AbstractMyType instead is a refactoring chore within a project, and a major API break if it crosses projects.
My thoughts how to deal with that are here. That linked thread describes a design-pattern that is not terribly unergonomic, but not super pretty either.
I think that does capture both the julia / multiple-dispatch spirit and the OOP-spirit (it does at least mostly reproduce the exact same data-layout as C++ single inheritance).