Methods modify objects which have an internal, updatable state. In contrast, an ADT introduces a new type. Any operation on a value of the new type must take the value as an input parameter. With a pure ADT, there are no operations that modify values of the type. In functional programming, all types are pure.
Errors are very likely with unlimited direct updating of composite variables.
Classes are typically not pure, because objects can be updated, i.e. modified. However programming with objects is still safer than programming with regular composite types, because updating can only be done through predefined methods. It can respond to all financial-history messages, and some additional messages. If a class Z has two parents X and Y both defining a method with the same name M, we speak of a multiple inheritance conflict. One method of an object can call another of the same object if necessary.