= Attributes (and inheritance) [source] ---- class Customer { Integer id; String name; Address address; int quota; } class DomesticCustomer extends Customer { String taxId; String attr1; String attr2; } class ForeignCustomer extends Customer { String vat; String attr3; String attr4; } ---- The general idea is that the attributes are ordered alphabetically, super attributes first. Subtypes are sorted depth-first and the attributes are sorted alphabetically within each sub-type. So the order of the attributes depends on where we start. Starting from Customer we have: `[address, name, quota, attr1, attr2, taxId, attr3, attr4, vat]` Starting from DomesticCustomer we have: `[address, name, quota, attr1, attr2]` Starting from ForeignCustomer we have: `[address, name, quota, attr3, attr4, vat]` This is why we cannot really have the position be an inherent part of the attribute itself - it changes depending on where we start.