logo

Classe abstracta en Java

Una classe que es declara amb la paraula clau abstracta es coneix com a classe abstracta a Java . Pot tenir mètodes abstractes i no abstractes (mètode amb el cos).

Abans d'aprendre la classe abstracta de Java, primer entenem l'abstracció a Java.

python snake vs anaconda

Abstracció a Java

Abstracció és un procés per ocultar els detalls de la implementació i mostrar només la funcionalitat a l'usuari.

D'altra manera, només mostra coses essencials a l'usuari i amaga els detalls interns, per exemple, enviant SMS on escriu el text i envia el missatge. No coneixeu el processament intern sobre el lliurament del missatge.

L'abstracció us permet centrar-vos en què és objecte fa en comptes de com ho fa.

Maneres d'aconseguir l'abstracció

Hi ha dues maneres d'aconseguir l'abstracció a Java

  1. Classe abstracta (0 a 100%)
  2. Interfície (100%)

Classe abstracta en Java

Una classe que es declara com a abstracta es coneix com a classe abstracta . Pot tenir mètodes abstractes i no abstractes. Cal ampliar-lo i implementar el seu mètode. No es pot instanciar.

Punts a recordar

  • Una classe abstracta s'ha de declarar amb una paraula clau abstracta.
  • Pot tenir mètodes abstractes i no abstractes.
  • No es pot instanciar.
  • Pot tenir constructors i mètodes estàtics també.
  • Pot tenir mètodes finals que obligaran la subclasse a no canviar el cos del mètode.
Regles per a la classe abstracta de Java

Exemple de classe abstracta

 abstract class A{} 

Mètode abstracte en Java

Un mètode que es declara com a abstracte i no té implementació es coneix com a mètode abstracte.

Exemple de mètode abstracte

 abstract void printStatus();//no method body and abstract 

Exemple de classe abstracta que té un mètode abstracte

En aquest exemple, Bike és una classe abstracta que només conté una execució de mètodes abstractes. La seva implementació la proporciona la 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(); } } 
Prova-ho ara
 running safely 

Comprensió de l'escenari real de la classe abstracta

En aquest exemple, Shape és la classe abstracta, i la seva implementació la proporcionen les classes Rectangle i Circle.

Majoritàriament, no sabem sobre la classe d'implementació (que està oculta per a l'usuari final), i un objecte de la classe d'implementació és proporcionada per mètode de fàbrica .

Estructures de control Python

A mètode de fàbrica és un mètode que retorna la instància de la classe. Més endavant coneixerem el mètode de fàbrica.

En aquest exemple, si creeu la instància de la classe Rectangle, s'invocarà el mètode draw() de la classe Rectangle.

Fitxer: 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(); } } 
Prova-ho ara
 drawing circle 

Un altre exemple de classe abstracta a Java

Fitxer: 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()+' %'); }} 
Prova-ho ara
 Rate of Interest is: 7 % Rate of Interest is: 8 % 

Classe abstracta amb constructor, membre de dades i mètodes

Una classe abstracta pot tenir un membre de dades, un mètode abstracte, un cos del mètode (mètode no abstracte), un constructor i fins i tot un mètode main().

Fitxer: 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(); } } 
Prova-ho ara
 bike is created running safely.. gear changed 

Regla: si hi ha un mètode abstracte en una classe, aquesta ha de ser abstracta.

 class Bike12{ abstract void run(); } 
Prova-ho ara
 compile time error 

Regla: si esteu ampliant una classe abstracta que té un mètode abstracte, heu de proporcionar la implementació del mètode o fer que aquesta classe sigui abstracta.


Un altre escenari real de classe abstracta

La classe abstracta també es pot utilitzar per proporcionar alguna implementació del interfície . En aquest cas, és possible que l'usuari final no es vegi obligat a anul·lar tots els mètodes de la interfície.

Nota: si sou principiant a java, apreneu primer la interfície i ometeu aquest exemple.

 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(); }} 
Prova-ho ara
 Output:I am a I am b I am c I am d