Java Made Clear: Diferença entre palavras-chave estáticas e finais

java estático vs final, ambos são modificadores de acesso conhecidos em Java fazendo diferentes funcionalidades (usados para diferentes trabalhos).
  1. estático: a palavra-chave estática pode ser aplicada a variáveis e métodos de instância, mas não a classes. Quando aplicado, variáveis e métodos podem ser chamados sem a ajuda de um objeto. Quando um método ou variável é chamado sem objeto, o encapsulamento não é mantido. Ou seja, com variáveis e métodos estáticos, o encapsulamento não existe.
  2. final: a palavra-chave final pode ser aplicada a todos os construtos – variáveis, métodos e classes. Quando aplicado, final comporta-se de forma muito diferente com cada um com funcionalidades diferentes.

Vamos explorar programmaticamente estática vs final java.

I) Utilização de palavra-chave estática

Geralmente, uma variável ou método de instância requer um objeto para chamar. Mas variáveis estáticas e métodos não requerem um objeto. Observe, o seguinte código.

public class Employee{ int age = 45; // non-static variable static double salary = 8877.66; // static variable public static void display() // static method { System.out.println("Hello World"); } public static void main(String args) { // System.out.println(age); // raises error, it is non-static and requires object System.out.println(salary); // works fine as salary is static, object not required display(); // works fine as display() is static, object not required }}

No código acima, a idade não é estática e requer um objeto com o qual chamar. Observe, o método main(). salário sendo estático não requer um objeto. Da mesma forma, com o método de exibição() estática. É chamado sem a necessidade de um objeto.

II) Utilização da palavra-chave final

Como dito anteriormente, a palavra-chave final pode ser aplicada em três lugares – variáveis, métodos e classes. Quando aplicada ela se comporta de forma diferente.

  1. Uma variável final não pode ser reatribuída.
  2. Um método final não pode ser substituído.
  3. Uma classe final não pode ser herdada.

Mas uma coisa pode ser encontrada em comum entre as três acima, “final significa que algo não pode ser feito”.

a) final com variáveis

A variável final funciona como uma constante de C/C++. Ou seja, uma variável final não pode ser reatribuída. Java não suporta a palavra-chave const e seu lugar usa a palavra-chave final.

public class Bank{ public static void main(String args) { int rupees = 500; // non-final can be reassigned System.out.println("rupees before reassigned: " + rupees); rupees = 600; // non-final System.out.println("rupees after reassigned: " + rupees); final double $rate = 61.5; // final cannot be reassigned System.out.println("$ Rate is Rs." + $rate); // $rate = 62.8; // raises error }}


A variável rupees não é final e, portanto, reatribuída com um novo valor de 600. $rate é final e, portanto, não pode ser reatribuído.

b) final com métodos

Se a superclasse não permitir que a subclasse sobreponha, ela simplesmente declara o método como final. Os métodos finais da super classe não podem ser sobrepostos pela subclasse.

class Manager{ public final void doSomeThing() // observe final { System.out.println("Do it right now"); }}public class Worker extends Manager{ public static void main(String args) { Worker w1 = new Worker(); w1.doSomeThing(); }}

No super class Manager, doSomeThing() é declarado final. O Worker da subclasse não tem permissão para substituir. Tente uma vez, ele levanta o erro de compilação. Se a super classe tiver métodos não-final (não mostrados no código), a subclasse pode se sentir livre para sobrescrever quando lhe for conveniente.

c) final com classes

O programador pode não gostar que uma classe seja herdada por outras classes porque ele gostaria de permitir a acessibilidade através da composição não por herança.

final class Fruit // observe, final class{ String nature = "Seedless";}public class Mango // extends Fruit raises compilation error{ public static void main(String args) { Fruit f1 = new Fruit(); System.out.println("Fruit type is " + f1.nature); }} 

No código acima, Fruit é declarado como final e, portanto, Mango não pode estendê-lo. Então como ela pode fazer uso dos métodos da classe Fruit? Simplesmente criando um objeto de Fruit e chamando métodos de classe Fruit. Isto é conhecido como composition.
What is Composition in Java?

Criar um objeto de outra classe em nossa classe e chamar outras variáveis e métodos de classe é conhecido como composition (conhecido como has-a relationship as one class “has a” object of other class). Aqui, objeto e método ou variável pertencem à mesma classe. Em contraste, em herança, objeto pertence à subclasse e variável ou método pertence à superclasse.

View All for Java Differences on 90 Topics

Deixe uma resposta

O seu endereço de email não será publicado.