Java: diferença entre A x = novo A () e A x = novo B () quando B estende A [duplicado]

Duplicata Possível:
herança de java - por favor explique

Estou aprendendo Java e tenho duas perguntas:

Qual é a diferença entre:

A x = new A();

e

A x = new B();

Considerando que:

class A
class B extends A

Qual é a diferença entre:

A x = new B();
(A)x.run_function();

Vamos dizer que tanto A quanto B têm a funçãorun_functionqual deles será executado?