[OCPJP6] 018 – Orientação a objetos

static

Dando continuidade ao post [011], métodos e variáveis static podem ser acessados a partir de uma classes não instanciada (new). Mas isso não impede que métodos ou variáveis static seja acessado por uma instância. Resumindo, métodos e variáveis static são compartilhados sem a necessidade de instância da sua classe de declaração.

Pontos importantes

  • Não existe sobrescrita de método static.
  • Dentro de um método static não é possível acessar métodos e variáveis não static.
  • Tanto métodos como variáveis static não podem ser acessados pela internamente como “this.”, se uma classe Automovel tiver uma variável tipo static, internamente ela poderia ser acessada Automovel.tipo e não this.tipo. Não compilaria porque this represeta a instância da classe.
  • Variáveis não static não podem receber (=) variáveis static.

Exemplos

package certificacao;
public class Automovel {
    public static void ligar() {
        System.out.println("Automovel..."); } }

public class Carro extends Automovel {
    public static void ligar() {
        System.out.println("Carro..."); } }

public class Main {
    public static void main(String[] args) {
        Automovel a = new Carro();
        a.ligar();
    }
}

Analisando o código acima, qual seria o resultado esperado?

  • Automovel…
  • Carro…

A resposta correta é “Automovel…” porque o método ligar() não referência uma instância. Se o método não fosse static, teriamos um exemplo de polimorfismo e obteríamos o resultado “Carro…”. A melhor forma de acessar o método ligar() sem ter dúvidas é: Automovel.ligar() ou Carro.ligar().

package certificacao;
public class Main {
    public static int count = 0;
    public Main() { count += 1; }

    public static void main(String[] args) {
        Main m = new Main(); // 1a instancia
        m = new Main(); // 2a instancia
        m = new Main(); // 3a instancia
        System.out.println(Main.count);
    }
}

Analisando o código acima, qual seria o resultado esperado?

O resultado será 3, porque a variável static count está compartilhada para qualquer instância.

Comentem, estendam o assunto… Compartilhem =)

Deixe um comentário