Ocultar variável e método em Java

Ocultar variável e método em Java

1. Introdução

Neste tutorial,we’re going to learn about variable and method hiding in the Java language.

Primeiro, vamos entender o conceito e o propósito de cada um desses cenários. Depois disso, vamos nos aprofundar nos casos de uso e examinar diferentes exemplos.

2. Escondendo Variável

O ocultamento de variável acontece quando declaramos uma propriedade em um escopo local que tem o mesmo nome que já temos no escopo externo.

Antes de pular para os exemplos, vamos recapitular brevemente os possíveis escopos de variáveis ​​em Java. Podemos defini-los com as seguintes categorias:

  • variáveis ​​locais - declaradas em um pedaço de código, como métodos, construtores, em qualquer bloco de código com chaves

  • variáveis ​​de instância - definidas dentro de uma classe e pertencem à instância do objeto

  • class oustatic variáveis ​​- são declaradas na classe com a palavra-chavestatic. Eles têm um escopo de nível de classe.

Agora, vamos descrever a ocultação com exemplos, para cada categoria individual de variáveis.

2.1. O poder do local

Vamos dar uma olhada na classeHideVariable:

public class HideVariable {

    private String message = "this is instance variable";

    HideVariable() {
        String message = "constructor local variable";
        System.out.println(message);
    }

    public void printLocalVariable() {
        String message = "method local variable";
        System.out.println(message);
    }

    public void printInstanceVariable() {
        String message = "method local variable";
        System.out.println(this.message);
    }
}

Aqui temos a variávelmessage declarada em 4 lugares diferentes. As variáveis ​​locais declaradas dentro do construtor e os dois métodos estão sombreando a variável de instância.

Vamos testar a inicialização de um objeto e chamar os métodos:

HideVariable variable = new HideVariable();
variable.printLocalVariable();

variable.printInstanceVariable();

A saída do código acima é:

constructor local variable
method local variable
this is instance variable

Aqui, as 2 primeiras chamadas estão recuperando as variáveis ​​locais.

Para acessar a variável de instância do escopo local, podemos usar a palavra-chavethis como é mostrada no métodoprintInstanceVariable().

2.2. Escondendo e a Hierarquia

Da mesma forma, quando as classes filho e pai têm uma variável com o mesmo nome, a variável do filho oculta a do pai.

Vamos supor que temos a classe pai:

public class ParentVariable {

    String instanceVariable = "parent variable";

    public void printInstanceVariable() {
        System.out.println(instanceVariable);
    }
}

Depois disso, definimos uma classe filho:

public class ChildVariable extends ParentVariable {

    String instanceVariable = "child variable";

    public void printInstanceVariable() {
        System.out.println(instanceVariable);
    }
}

Para testá-lo, vamos inicializar duas instâncias. Um com a classe pai e outro com a filha, então invoque os métodosprintInstanceVariable() em cada um deles:

ParentVariable parentVariable = new ParentVariable();
ParentVariable childVariable = new ChildVariable();

parentVariable.printInstanceVariable();
childVariable.printInstanceVariable();

A saída mostra a propriedade oculta:

parent variable
child variable

In most cases, we should avoid creating variables with the same name both in parent and child classes. Em vez disso, devemos usar um modificador de acesso apropriado comoprivate e métodos getter / setter para esse propósito.

3. Esconder Método

A ocultação de método pode ocorrer em qualquer estrutura hierárquica em java. Quando uma classe filha define um método estático com a mesma assinatura de um método estático na classe pai, então o método filhohidesé aquele da classe pai. Para saber mais sobre a palavra-chavestatic,this write-up is a good place to start.

O mesmo comportamento envolvendo os métodos da instância é chamado substituição de método. Para saber mais sobre como substituir métodos, verifique nossoguide here.

Agora, vamos dar uma olhada neste exemplo prático:

public class BaseMethodClass {

    public static void printMessage() {
        System.out.println("base static method");
    }
}

BaseMethodClass tem um único métodoprintMessage() static.

A seguir, vamos criar uma classe filha com a mesma assinatura da classe base:

public class ChildMethodClass extends BaseMethodClass {

    public static void printMessage() {
        System.out.println("child static method");
    }
}

Veja como funciona:

ChildMethodClass.printMessage();

A saída após chamar o métodoprintMessage():

child static method

OChildMethodClass.printMessage() muda o método emBaseMethodClass.

3.1. Método Escondido vs Substituição

Ocultar não funciona como substituir, porque os métodos estáticos não são polimórficos. A substituição ocorre apenas com métodos de instância. Ele suporta ligação tardia, portanto, qual método será chamado é determinado em tempo de execução.

On the other hand, method hiding works with static ones. Therefore it’s determined at compile time.

4. Conclusão

In this article, we went over the concept of method and variable hiding in Java. Mostramos diferentes cenários de ocultação e sombreamento variáveis. O destaque importante do artigo também está comparando o método substituindo e ocultando.

Como de costume, o código completo está disponívelover on GitHub.