== 1. Classes: only the first non-serializable superclass constructor runs == after new Child() : Child runs = 1, Parent runs = 1 after the copy : Child runs = 1, Parent runs = 2 == 2. Records: the canonical constructor DOES run == after new Money(..) : canonical runs = 1 after the copy : canonical runs = 2 == 3. An allow-list filter on the reading side == list of String and Money : [text, Money[paise=1]] list holding an AtomicInteger : InvalidClassException: filter status: REJECTED