[DÚVIDA] Declarando uma varíavel em Java

Poderiam me explicar alguns pontos? Com base nessa linha:

List<Object> obj = new ArrayList<Object>();
  1. O que significa a declaração antes de "obj"?
  2. O que significa a declaração depois do "="?
  3. Que tipo e que classe é o "obj" depois dessa linha?

Estou com dúvida porque, ao criar um objeto ArrayList, o código passou que o tipo dele é List, o que me deixou muito em dúvida pq List é uma interface, então nem deveria ser possível ter um objeto assim

HELP.

Não sou dev Java mas acredito que seja igual ao C#:

  1. O lado esquerdo é o tipo da variavel, provavelmente você pode trocar por var (isso vai fazer o compilador declarar o mesmo tipo do lado direito).
  2. O lado direito é de fato a variavel que foi criada, a instancia.
  3. Se tornou List pq vc declarou como List, visto que ArrayList é uma implementação de List, ta tudo ok. A variavel object vai aceitar qualquer tipo que implemente a interface List mas você vai poder usar apenas os metodos de List.
Valeu pedro! mas infelizmente não tem o tipo "var" em java

A declaração antes de "obj" significa que você esta utilizando a class List para guardar objetos do tipo *obs: o tipo object é o tipo mais genérico de todos, este tipo de declaração não é aconselhável pois para ler os dados deste objeto posteriormente você precisara fazer um "Cast" ou seja transformar este tipo generico de classe em um tipo específico. Isto é possível devido ao polimorfismo, mas lembre-se só é possível fazer isto pois a classe atribuida "ArrayList" não é uma interface e nem uma classe abstrata.

O simbolo "=" significa atribuição, ou seja você está atribuindo uma instância de ArrayList() a variável obj do tipo "List". Esta atribuição é aceitável pois o tipo ArrayList estende a classe List o que permite fazer esta implementação.

Como dito anteriormente esta classe Object é o tipo mais genérico em java, ou seja todas as classes existentes derivam se da class Object, o que significa que sua lista pode armazenar qualquer classe em java, porém com os malefícios de precisar fazer um "Cast" toda vez que precisar ler ou recuperar esta variável.

isso se chama generics, o que está dentro de <...> é o tipo de lista que vc quer pode ser Object poderia ser uma outra classe https://www.devmedia.com.br/usando-generics-em-java/28981