English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Tutoriais Básicos de Java

Controle de fluxo Java

Array Java

Java orientação a objetos (I)

Java orientação a objetos (II)

Java orientação a objetos (III)

Tratamento de Exceções Java

Lista Java

Java Fila (Fila)

Conjunto Map do Java

Conjunto Java

Java entrada e saída (I/O)

Reader do Java/Writer

Outros tópicos do Java

Classe Abstrata e Método Abstrato Java

Neste tutorial, vamos aprender sobre a abstração no Java. Vamos aprender sobre classes abstratas e métodos no Java, bem como como usá-los em programas.

Classe abstrata do Java

As classes abstratas são classes que não podem ser instanciadas (nós não podemos criar objetos de classes abstratas). No Java, usamos a palavra-chave abstract para declarar uma classe abstrata.

abstract class Animal {
   //Atributos e métodos
}

Se tentar criar um objeto de classe abstrata, ocorrerá um erro de compilação. Por exemplo:

Animal a1 = new Animal()

Será gerado um erro de compilação:

 O animal é abstrato; não pode ser instanciado

Embora não possamos instanciar uma classe abstrata, podemos criar subclasses dela. Podemos criar objetos da subclasse para acessar os membros da classe abstrata.

Antes de entendermos melhor, precisamos entender o que é um método abstrato.

Método abstrato Java

Usamos a mesma palavra-chave abstract para criar métodos abstratos. Declaramos um método abstrato sem implementá-lo. Por exemplo,

abstract void makeSound();

Aqui, makeSound() é um método abstrato.

É importante notar que apenas uma classe abstrata pode conter métodos abstratos. Se incluímos métodos abstratos em uma classe que não é abstrata, ocorrerá um erro.

Classe abstrata pode conter métodos abstratos e não abstratos. Este é um exemplo.

abstract class Animal {
   public void displayInfo() {
      System.out.println(“Eu sou um animal.”);
   }
   abstract void makeSound();
}

No exemplo acima, criamos uma classe abstrata Animal. Ela contém um método abstrato makeSound() e um método não abstrato displayInfo().

Herança de classe abstrata

Classe abstrata não pode ser instanciada. Para acessar os membros da classe abstrata, devemos herdá-la. Por exemplo

Exemplo1:Herança de classe abstrata

abstract class Animal {
 public void displayInfo() {
   System.out.println("Eu sou um animal.");
 }
}
class Dog extends Animal {
}
class Main {
 public static void main(String[] args) {
   Dog d1 = new Dog();
   d1.displayInfo();
 }
}

Saída:

Eu sou um animal.

No exemplo acima, criamos uma classe abstrata Animal. Não podemos criar um objeto da classe Animal. Para acessar o método displayInfo() da classe Animal, herdamos a subclasse Dog da Animal.

Então, usamos o d do Dog1O objeto acessa o método displayInfo().

Sobrescrevendo método abstrato

Em Java, é necessário sobrescrever os métodos abstratos da superclasse na subclasse. Isso é porque a subclasse herda os métodos abstratos da superclasse.

 Porque nossa subclasse contém métodos abstratos, precisamos sobrescrevê-los.

Atenção:Se a subclasse também for declarada como abstrata, não é necessário forçar a sobrescrever o método abstrato.

Exemplo2:Sobrescrevendo método abstrato

abstract class Animal {
   abstract void makeSound();
   public void eat() {
      System.out.println("Eu posso comer.");
   }
}
class Dog extends Animal {
   public void makeSound() {
      System.out.println("Latir latir");
   }
}
class Main {
   public static void main(String[] args) {
      Dog d1 = new Dog();
      d1.makeSound();
      d1.eat();
   }
}

Saída:

Latir latir.
Eu posso comer.

No exemplo acima, criamos uma classe abstrata Animal. Esta classe contém um método abstrato makeSound() e um método não abstrato eat().

Nós herdamos uma subclasse Dog da superclasse Animal. Aqui, a subclasse Dog sobrescreve o método abstrato displayInfo().

 E então criamos o objeto Dog d1. Usando o objeto, chamamos d1.displayInfo() e d1método .eat().

Acesso ao construtor da classe abstrata

Da mesma forma que nas classes não abstratas, usamos o super para acessar o construtor da classe abstrata da subclasse. Por exemplo,

abstract class Animal {
   Animal() {
      ...
   }
}
class Dog extends Animal {
   Dog() {
      super();
      ...
   }
}

Aqui, usamos o super() no construtor Dog para acessar o construtor da classe Animal.

Atenção, o super deve ser o primeiro comando na função de construtor da subclasse. AcessoPalavra-chave superPara obter mais informações.

Por que usar a abstração em Java?

A abstração é um conceito importante da programação orientada a objetos. A abstração apenas mostra as informações necessárias, mantendo todas as detalhes desnecessários ocultos. Isso nos permite gerenciar a complexidade através de ideias mais simples e avançadas, omitindo ou escondendo detalhes.

Um exemplo prático de abstração pode ser o freio da motocicleta. Nós sabemos o efeito do freio. Quando pisamos no freio, a motocicleta para. Mas, o funcionamento do freio é oculto para nós.

Uma das principais vantagens da abstração da maneira de funcionamento do freio é que, agora, os fabricantes podem usar diferentes freios para diferentes motocicletas, mas o efeito do freio é o mesmo.

Vamos dar um exemplo para nos ajudar a entender melhor o conceito de abstração em Java.

Exemplo3Exemplo de Java abstrato

abstract class Animal {
   abstract void makeSound();
}
class Dog extends Animal {
   public void makeSound() {
      System.out.println("Bark bark.");
   }
}
class Cat extends Animal {
   public void makeSound() {
      System.out.println("Meows ");
   }
}
class Main {
   public static void main(String[] args) {
      Dog d1 = new Dog();
      d1.makeSound();
      Cat c1 = new Cat();
      c1.makeSound();
   }
}

Saída:

Bark bark
Meows

No exemplo acima, criamos uma superclasse Animal. A superclasse Animal possui o método abstrato makeSound().

O método makeSound() não pode ser implementado dentro da classe Animal. Isso é porque cada animal emite sons diferentes. Portanto, todas as subclasses de Animal têm implementações diferentes do método makeSound().

Não podemos implementar makeSound() em Animal de maneira correta para todos os subtipos de Animal. Portanto, a implementação makeSound() em Animal permanece oculta.

 No exemplo acima, o Dog implementou sua própria implementação makeSound(), o Cat implementou sua própria implementação makeSound().

Ponto a lembrar

  • Usamos a palavra-chave abstract para criar classes e métodos abstratos.

  • Os métodos abstratos não têm implementação (corpo de método).

  • A classe que contém métodos abstratos também deve ser abstrata.

  • Não podemos criar um objeto da classe abstrata.

  • Para implementar as funcionalidades da classe abstrata, herdamos a subclasse e criamos um objeto dessa subclasse.

  • A subclasse deve sobrescrever todos os métodos abstratos da classe abstrata. No entanto, se a subclasse for declarada como abstrata, não é necessário sobrescrever o método abstrato forçadamente.

  • Podemos usar uma referência de classe abstrata para acessar atributos e métodos estáticos da classe abstrata. Por exemplo:

    Animal.staticMethod();

Interface Java

Em Java, uma interface é semelhante a uma classe abstrata. No entanto, uma interface não possui métodos não abstratos. No próximo tutorial, vamos aprender mais sobre interfaces.