Variáveis ​​em Java não seguem polimorfismo. A substituição é aplicável apenas a métodos, mas não a variáveis. Em Java, se a classe filho e a classe pai têm uma variável com o mesmo nome, a variável da classe filho oculta a variável da classe pai, mesmo se seus tipos forem diferentes. Este conceito é conhecido como Ocultação de Variável . No caso de substituição de método , os métodos de substituição substituem completamente os métodos herdados, mas no ocultamento de variáveis, a classe filha oculta as variáveis ​​herdadas em vez de substituí-las, o que basicamente significa que o objeto da classe Criança contém ambas as variáveis, mas a variável de Criança oculta a variável de Parent. 

Portanto, quando tentamos acessar a variável dentro da classe Filha, ela será acessada a partir da classe Filha. Se estivermos tentando acessar a variável fora das classes Pai e Filho, a variável de instância é escolhida a partir do tipo de referência.

Exemplo

// Java Program Illustrating Instance variables
// Can not be Overridden
  
// Class 1
// Parent class
// Helper class
class Parent {
    // Declaring instance variable by name `a`
    int a = 10;
    public void print()
    {
        System.out.println("inside B superclass");
    }
}
  
// Class 2
// Child class
// Helper class
class Child extends Parent {
  
    // Hiding Parent class's variable `a` by defining a
    // variable in child class with same name.
    int a = 20;
  
    // Method defined inside child class
    public void print()
    {
        // Print statement
        System.out.println("inside C subclass");
    }
}
  
// Main class
public class GFG {
  
    // Main driver method
    public static void main(String[] args)
    {
        // Creating a Parent class object
        // Reference Parent
        Parent obj = new Child();
  
        // Calling print() method over object created
        obj.print();
  
        // Printing superclass variable value 10
        System.out.println(obj.a);
  
        // Creating a Child class object
        // Reference Child
        Child obj2 = new Child();
  
        // Printing childclass variable value 20
        System.out.println(obj2.a);
    }
}
Saída
dentro da subclasse C
10
20

Conclusão: 

Variáveis ​​em Java não seguem polimorfismo e substituição. Se estivermos tentando acessar a variável fora das classes Pai e Filho, a variável de instância é escolhida a partir do tipo de referência.