A tisztan OO Java az, ahol kenyelmes, hogy van egy Object osztaly, amibol minden szarmazik.
Kivéve a primitív típusok (int, boolean stb.), amik miatt nem is szokás a Javát "tisztán OO"-nak tekinteni. :) (Egyébként a static metódusok sem igazán "tisztán OO" konstrukciók, de ebbe a nyelvi "workaroundba" ritkábban szokás belekötni ebből a szempontból, pláne, ha nagyon akarjuk, akkor be lehet erőszakolni őket a modellbe, csak épp számos alapelvet sértenek.)
Leszarmazottat ugye hasznalhatsz barhol az os helyett, emiatt jo, ha van ilyen hierarchia (ami Java eseten fa, mert nincs tobbszoros orokles).
Azért ebbe a zárójeles részbe az interface-ek default metódusai Java 8 óta egy picit belepiszkálnak, azóta lehet "többszörös öröklés" implementáció tekintetében is, és okozhat is gondot (aminek a feloldása programozói feladat). Előtte csak "interfész" vagy másnéven "típus" tekintetében volt erre lehetőség.
A pythonhoz nem igazán értek, bár amit leírtál, az a "duck typing" tankönyvi példája. :)