Neste tutorial, aprenderemos sobre as classes e métodos abstratos Java com a ajuda de exemplos. Também aprenderemos sobre abstração em Java.
Java Abstract Class
A classe abstrata em Java não pode ser instanciada (não podemos criar objetos de classes abstratas). Usamos a abstract
palavra-chave para declarar uma classe abstrata. Por exemplo,
// create an abstract class abstract class Language ( // fields and methods )… // try to create an object Language // throws an error Language obj = new Language();
Uma classe abstrata pode ter métodos regulares e métodos abstratos. Por exemplo,
abstract class Language ( // abstract method abstract void method1(); // regular method void method2() ( System.out.println("This is regular method"); ) )
Para saber sobre os métodos não abstratos, visite métodos Java. Aqui, aprenderemos sobre métodos abstratos.
Método Abstrato Java
Um método que não possui seu corpo é conhecido como método abstrato. Usamos a mesma abstract
palavra-chave para criar métodos abstratos. Por exemplo,
abstract void display();
Aqui display()
está um método abstrato. O corpo de display()
é substituído por ;
.
Se uma classe contém um método abstrato, então a classe deve ser declarada abstrata. Caso contrário, um erro será gerado. Por exemplo,
// error // class should be abstract class Language ( // abstract method abstract void method1(); )
Exemplo: classe e método abstratos Java
Embora as classes abstratas não possam ser instanciadas, podemos criar subclasses a partir delas. Podemos então acessar membros da classe abstrata usando o objeto da subclasse. Por exemplo,
abstract class Language ( // method of abstract class public void display() ( System.out.println("This is Java Programming"); ) ) class Main extends Language ( public static void main(String() args) ( // create an object of Main Main obj = new Main(); // access method of abstract class // using object of Main class obj.display(); ) )
Resultado
Esta é a programação Java
No exemplo acima, criamos uma classe abstrata chamada Language. A classe contém um método regular display()
.
Criamos a classe Main que herda a classe abstrata. Observe a declaração,
obj.display();
Aqui, obj é o objeto da classe filha Main. Estamos chamando o método da classe abstrata usando o objeto obj.
Implementando Métodos Abstratos
Se a classe abstrata incluir qualquer método abstrato, todas as classes filhas herdadas da superclasse abstrata devem fornecer a implementação do método abstrato. Por exemplo,
abstract class Animal ( abstract void makeSound(); public void eat() ( System.out.println("I can eat."); ) ) class Dog extends Animal ( // provide implementation of abstract method public void makeSound() ( System.out.println("Bark bark"); ) ) class Main ( public static void main(String() args) ( // create an object of Dog class Dog d1 = new Dog(); d1.makeSound(); d1.eat(); ) )
Resultado
Eu posso comer casca de árvore.
No exemplo acima, criamos uma classe abstrata Animal. A classe contém um método abstrato makeSound()
e um método não abstrato eat()
.
Herdamos uma subclasse Dog da superclasse Animal. Aqui, a subclasse Dog fornece a implementação para o método abstrato makeSound()
.
Em seguida, usamos o objeto d1 da classe Dog para chamar os métodos makeSound()
e eat()
.
Nota : Se a classe Dog não fornece a implementação do método abstrato makeSound()
, Dog também deve ser declarado como abstrato. Isso ocorre porque a subclasse Dog herda makeSound()
de Animal.
Construtor de acessos de classes abstratas
Uma classe abstrata pode ter construtores como a classe regular. E podemos acessar o construtor de uma classe abstrata da subclasse usando a super
palavra - chave. Por exemplo,
abstract class Animal ( Animal() (… . ) ) class Dog extends Animal ( Dog() ( super();… ) )
Aqui, usamos super()
o construtor dentro do Cão para acessar o construtor do Animal.
Observe que super
deve ser sempre a primeira instrução do construtor da subclasse. Visite Java super keyword para saber mais.
Abstração Java
O principal uso de classes e métodos abstratos é obter abstração em Java.
Abstração é um conceito importante de programação orientada a objetos que nos permite ocultar detalhes desnecessários e mostrar apenas as informações necessárias.
Isso nos permite gerenciar a complexidade omitindo ou ocultando detalhes com uma ideia mais simples e de nível superior.
Um exemplo prático de abstração pode ser o freio de motocicleta. Nós sabemos o que o freio faz. Quando puxamos o freio, a moto para. No entanto, o funcionamento do freio é mantido escondido de nós.
A grande vantagem de ocultar o funcionamento do freio é que agora o fabricante pode implementar o freio de forma diferente para motos diferentes, no entanto, o que o freio faz será o mesmo.
Vamos dar um exemplo que nos ajuda a entender melhor a abstração Java.
Exemplo 3: abstração Java
abstract class Animal ( abstract void makeSound(); ) class Dog extends Animal ( // implementation of abstract method public void makeSound() ( System.out.println("Bark bark."); ) ) class Cat extends Animal ( // implementation of abstract method 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(); ) )
Produto :
Bark bark Meows
In the above example, we have created a superclass Animal. The superclass Animal has an abstract method makeSound()
.
The makeSound()
method cannot be implemented inside Animal. It is because every animal makes different sounds. So, all the subclasses of Animal would have different implementation of makeSound()
.
So, the implementation of makeSound()
in Animal is kept hidden.
Here, Dog makes its own implementation of makeSound()
and Cat makes its own implementation of makeSound()
.
Note: We can also use interfaces to achieve abstraction in Java. To learn more, visit Java Interface.
Key Points to Remember
- We use the
abstract
keyword to create abstract classes and methods. - An abstract method doesn't have any implementation (method body).
- Uma classe contendo métodos abstratos também deve ser abstrata.
- Não podemos criar objetos de uma classe abstrata.
- Para implementar recursos de uma classe abstrata, herdamos subclasses dela e criamos objetos da subclasse.
- Uma subclasse deve substituir todos os métodos abstratos de uma classe abstrata. No entanto, se a subclasse for declarada abstrata, não é obrigatório sobrescrever métodos abstratos.
- Podemos acessar os atributos e métodos estáticos de uma classe abstrata usando a referência da classe abstrata. Por exemplo,
Animal.staticMethod();