JavaRush /Blogue Java /Random-PT /Pergunta e Resposta: É possível definir métodos abstratos...

Pergunta e Resposta: É possível definir métodos abstratos em uma classe final?

Publicado no grupo Random-PT
Esta pergunta interessante e importante foi feita a um de meus leitores durante uma entrevista por telefone para um cargo de desenvolvedor Java. Embora soubesse que era impossível fazer uma classe abstrata finalna linguagem Java , ele ficou confuso com a formulação da pergunta. A resposta é simples: não, finalnão pode haver métodos abstratos em uma classe. Por que? Porque assim que você declara um método abstrato em uma classe de linguagem Java, essa classe automaticamente se torna abstrata e finalvocê não pode criar uma classe abstrata na linguagem Java. finalIsso significa que não pode haver métodos abstratos em uma classe Java.
Pergunta e Resposta: É possível definir métodos abstratos em uma classe final?  - 1
Muitos desenvolvedores Java ficam confusos ao responder a esta pergunta por causa do texto. Mesmo que a pessoa que fez a pergunta esteja familiarizada com o conceito geral, ela pode não perceber que uma classe, após declarar um método abstrato nela, se torna abstrata, e você não pode criar uma classe abstrata finalem Java. Este ponto separa esta questão da pergunta mais comum e frequente: é possível em Java declarar uma classe como abstrata e final ao mesmo tempo? Vejamos um exemplo de código para demonstrar que finalnão é possível declarar um método abstrato em uma classe. Vamos Hello.javater public finaluma classe chamada Hello, que possui um método abstrato print().
public final class Hello {
  public abstract void print();
}
Digite este código no IDE, você receberá a seguinte mensagem de erro, eles dizem Helloque deve ser uma classe abstrata para que métodos abstratos possam ser declarados nela.
Pergunta e Resposta: É possível definir métodos abstratos em uma classe final?  - 2
Pergunta e Resposta: É possível definir métodos abstratos em uma classe final?  -3
A mesma coisa acontecerá se você digitar este código no Bloco de Notas e compilá-lo usando o utilitário javac na linha de comando. De acordo com as especificações Java, assim que você declara um método abstrato dentro de uma classe, essa classe se torna uma classe abstrata e, como você não pode criar uma classe abstrata finalem Java, o compilador irá gerar um erro. Isso é verdadeiro tanto para classes de nível superior quanto para classes aninhadas na linguagem Java. Mesmo se você declarar um método abstrato em uma finalclasse aninhada, o erro será o mesmo. Outra questão relacionada é: uma classe abstrata em Java pode ter métodos estáticos? Resposta: sim, podem, não há problema em declarar um método estático em uma classe abstrata, pois para usar um método estático não é necessário criar uma instância da classe, eles podem ser chamados simplesmente usando o nome da classe. Podemos modificar nosso exemplo para incluir Helloum método na classe main(), que é estático em Java, conforme mostrado abaixo:
public abstract class Hello {
  public abstract void print();
  public static void main(String args[]) {
     // Howой-то code
  }
}
Como você pode ver, nenhum erro de compilação é gerado. Este código é compilado sem problemas, pois em Java você pode declarar com total segurança um método estático em uma classe abstrata. Breves conclusões É impossível declarar um método abstrato em uma finalclasse. Porque depois de fazer isso, a classe automaticamente se torna abstrata, de acordo com as especificações Java. E como finaluma -class em Java não pode ser abstrata, isso é inaceitável e o compilador proibirá você de fazer isso gerando um erro. Mas você pode declarar métodos estáticos tanto em classes finais quanto em classes abstratas, não há problemas com isso.
Comentários
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION