Takový potomek by však nesplňoval LSP, neměl by tedy vůbec vzniknout.
Tak jasně, pokud by to bylo podle teorie OOP, tak stačí značkovací rozhraní*. Jenže reálně to nejde vždycky zařídit, stačí, když potomek třeba drží spojení přes MPI, zastupuje nějaký OpenGL objekt nebo má data v JNI, a už to nejde serializovat bez obrovského (a zbytečného, když se to nepoužije) úsilí, typicky tak, že si to pamatuje všechny kroky, jak byl ten objekt vytvořen. Často se to řeší, že ta třída implementuje
readObject, která vyhazuje
UnsupportedOperationException. Bohužel to nejde snadno prohnat anotačním procesorem, který se může pokusit detekovat případy, kdy se takový neserializovatelný objekt pokoušíte serializovat, a tím, že je to opt-out místo opt-in, je to dost náchylné na to, že to někdo zapomene implementovat, a pak se to třeba neodhalí ani testy, protože třeba u toho OpenGL jsou identifikátory objektů
inty, u dat v JNI to zase bývají
longy jakožto 64bitové pointery, oboje serializátor bez problémů sežere, a pokud se to ten test nepokusí deserializovat v jiném procesu, tak to dokonce bude fungovat.
* tedy ani ta značkovací rozhraní nedávají v čistém OOP smysl, protože nepřidávají žádnou funkčnost; to, co to značkovací rozhraní využívá, by správně mělo být implementované v tom samotném rozhraní, ale to je dané limitací Javy < 8, která neuměla default metody