Even though class inheritance may combine multiple modules along a single implementation inheritance chain, conceptually, object creation occurs using a single class blueprint. Importantly, the blueprint brands the object, and this class branding does not change during the object's lifetime. The class used to create an object determines the object's implementation code. The object's structure does not subsequently change. The class concept primarily focuses on modularization and implementation code reuse.
Class definitions provide the implementation code associated with a runtime object.
So at runtime, an object has class, not type. Nevertheless, when a class defines implementation code, it also defines a type. Though I agree with the spirit of Gosling's assertion, I accept and practice referring to an object's type. That does not compromise the important distinction between type and class that lies in separating interface and implementation. Conclusion Type and class are not indistinguishable.