Sembra che tu abbia un libro astratto (con autore, titolo, contenuti ecc.) e un libro fisico (un libro stampato su carta, rilegato in pelle, cartone ecc.)
Avrei un abstractbook di classe, che puoi usare all'interno del catalogo della biblioteca per esempio (perché il catalogo della biblioteca non contiene libri fisici), e una classe PhysicalBook, che conterrebbe un riferimento ad un AbstractBook. Un PhysicalBook (stampato su carta) non è un AbstractBook, quindi non dovrebbe essere una sottoclasse.
Un PhysicalBook avrebbe anche proprietà come il prezzo di acquisto, dove acquistato, lo stato fisico (nuovo di zecca, quasi nuovo, danneggiato, a pezzi), se il libro è in prestito e così via.
Se in realtà scrivi codice per essere utilizzato da una vera e propria biblioteca mondiale, dove le persone prendono seriamente queste cose, potresti anche avere una classe "BookEdition" in cui più edizioni possono avere lo stesso libro astratto, ma diverse date di stampa, ISBN numeri e così via. E una traduzione di un libro potrebbe essere considerata la stessa o un altro libro.