Como uma única variável de referência pode acessar todos os campos de objetos?

Animal myAnimal = new Animal();

Eu tenho esse código acima. Tanto quanto eu sei, ele fará as seguintes coisas:

Um objeto animal será criado na memória heapA referência a esse objeto será passada para a variável de referência "myAnimal". Em outras palavras, a variável "myAnimal" mantém o endereço de memória do objeto "Animal" na pilha.

O que eu não entendo é que

Como é o valor do endereço de memória?Esse é um endereço ou vários valores de endereço? Se apenas um, como o myAnimal pode acessar todos os campos do objeto Animal, como myAnimal.name, myAnimal.height, ...?

Alguém pode explicar isso, por favor? Desde já, obrigado.