Uma classe que é declarada com a palavra-chave abstract é conhecida como classe abstrata em Java . Pode ter métodos abstratos e não abstratos (método com corpo).
Antes de aprender a classe abstrata Java, vamos primeiro entender a abstração em Java.
obter a data atual em java
Abstração em Java
Abstração é um processo de ocultar os detalhes da implementação e mostrar apenas a funcionalidade ao usuário.
Outra forma, mostra apenas coisas essenciais ao usuário e oculta os detalhes internos, por exemplo, o envio de SMS onde você digita o texto e envia a mensagem. Você não conhece o processamento interno sobre a entrega da mensagem.
A abstração permite que você se concentre no que o objeto faz em vez de como faz.
Maneiras de alcançar a abstração
Existem duas maneiras de obter abstração em java
- Aula abstrata (0 a 100%)
- Interface (100%)
Classe abstrata em Java
Uma classe declarada como abstrata é conhecida como classe abstrata . Pode ter métodos abstratos e não abstratos. Ele precisa ser ampliado e seu método implementado. Não pode ser instanciado.
Pontos para lembrar
- Uma classe abstrata deve ser declarada com uma palavra-chave abstrata.
- Pode ter métodos abstratos e não abstratos.
- Não pode ser instanciado.
- Pode ter construtores e métodos estáticos também.
- Pode ter métodos finais que forçarão a subclasse a não alterar o corpo do método.
Exemplo de classe abstrata
abstract class A{}
Método abstrato em Java
Um método que é declarado como abstrato e não possui implementação é conhecido como método abstrato.
Exemplo de método abstrato
abstract void printStatus();//no method body and abstract
Exemplo de classe abstrata que possui um método abstrato
Neste exemplo, Bike é uma classe abstrata que contém apenas um método abstrato executado. Sua implementação é fornecida pela classe Honda.
abstract class Bike{ abstract void run(); } class Honda4 extends Bike{ void run(){System.out.println('running safely');} public static void main(String args[]){ Bike obj = new Honda4(); obj.run(); } }Teste agora
running safely
Entendendo o cenário real da aula Abstract
Neste exemplo, Shape é a classe abstrata e sua implementação é fornecida pelas classes Rectangle e Circle.
Principalmente, não sabemos sobre a classe de implementação (que está oculta para o usuário final), e um objeto da classe de implementação é fornecido pelo método de fábrica .
A método de fábrica é um método que retorna a instância da classe. Aprenderemos sobre o método de fábrica mais tarde.
Neste exemplo, se você criar a instância da classe Rectangle, o método draw() da classe Rectangle será invocado.
Arquivo: TestAbstraction1.java
abstract class Shape{ abstract void draw(); } //In real scenario, implementation is provided by others i.e. unknown by end user class Rectangle extends Shape{ void draw(){System.out.println('drawing rectangle');} } class Circle1 extends Shape{ void draw(){System.out.println('drawing circle');} } //In real scenario, method is called by programmer or user class TestAbstraction1{ public static void main(String args[]){ Shape s=new Circle1();//In a real scenario, object is provided through method, e.g., getShape() method s.draw(); } }Teste agora
drawing circle
Outro exemplo de classe Abstract em java
Arquivo: TestBank.java
abstract class Bank{ abstract int getRateOfInterest(); } class SBI extends Bank{ int getRateOfInterest(){return 7;} } class PNB extends Bank{ int getRateOfInterest(){return 8;} } class TestBank{ public static void main(String args[]){ Bank b; b=new SBI(); System.out.println('Rate of Interest is: '+b.getRateOfInterest()+' %'); b=new PNB(); System.out.println('Rate of Interest is: '+b.getRateOfInterest()+' %'); }}Teste agora
Rate of Interest is: 7 % Rate of Interest is: 8 %
Classe abstrata com construtor, membro de dados e métodos
Uma classe abstrata pode ter um membro de dados, um método abstrato, um corpo de método (método não abstrato), um construtor e até mesmo um método main().
rujira banerjee
Arquivo: TestAbstraction2.java
//Example of an abstract class that has abstract and non-abstract methods abstract class Bike{ Bike(){System.out.println('bike is created');} abstract void run(); void changeGear(){System.out.println('gear changed');} } //Creating a Child class which inherits Abstract class class Honda extends Bike{ void run(){System.out.println('running safely..');} } //Creating a Test class which calls abstract and non-abstract methods class TestAbstraction2{ public static void main(String args[]){ Bike obj = new Honda(); obj.run(); obj.changeGear(); } }Teste agora
bike is created running safely.. gear changed
Regra: Se houver um método abstrato em uma classe, essa classe deverá ser abstrata.
class Bike12{ abstract void run(); }Teste agora
compile time error
Regra: Se você estiver estendendo uma classe abstrata que possui um método abstrato, você deverá fornecer a implementação do método ou tornar esta classe abstrata.
Outro cenário real de classe abstrata
A classe abstrata também pode ser usada para fornecer alguma implementação do interface . Nesse caso, o usuário final não pode ser forçado a substituir todos os métodos da interface.
Nota: Se você é iniciante em Java, aprenda primeiro a interface e pule este exemplo.
interface A{ void a(); void b(); void c(); void d(); } abstract class B implements A{ public void c(){System.out.println('I am c');} } class M extends B{ public void a(){System.out.println('I am a');} public void b(){System.out.println('I am b');} public void d(){System.out.println('I am d');} } class Test5{ public static void main(String args[]){ A a=new M(); a.a(); a.b(); a.c(); a.d(); }}Teste agora
Output:I am a I am b I am c I am d