La paraula clau abstracta s'utilitza per aconseguir l'abstracció a Java. És un modificador sense accés que s'utilitza per crear classes i mètodes abstractes.
El paper d'una classe abstracta és contenir mètodes abstractes. Tanmateix, també pot contenir mètodes no abstractes. El mètode que es declara amb una paraula clau abstracta i no té cap implementació es coneix com a mètode abstracte.
Sintaxi: -
abstract class Employee { abstract void work(); }
Nota: no podem declarar mètodes abstractes en classes no abstractes.
Regles de la paraula clau abstracta
No ho faci
- Una paraula clau abstracta no es pot utilitzar amb variables i constructors.
- Si una classe és abstracta, no es pot instanciar.
- Si un mètode és abstracte, no conté el cos.
- No podem utilitzar la paraula clau abstracta amb el final .
- No podem declarar mètodes abstractes com privat .
- No podem declarar mètodes abstractes com estàtica .
- Un mètode abstracte no es pot sincronitzar.
Fes
- Una paraula clau abstracta només es pot utilitzar amb classe i mètode.
- Una classe abstracta pot contenir constructors i mètodes estàtics.
- Si una classe amplia la classe abstracta, també ha d'implementar almenys un dels mètodes abstractes.
- Una classe abstracta pot contenir el mètode principal i el mètode final.
- Una classe abstracta pot contenir mètodes abstractes sobrecarregats.
- Podem declarar la classe interna local com a abstracta.
- Podem declarar el mètode abstracte amb una clàusula throw.
Exemples de paraules clau abstractes
Exemple 1: classe abstracta que conté el mètode abstracte
abstract class Vehicle { abstract void bike(); } class Honda extends Vehicle { @Override void bike() { System.out.println('Bike is running'); } } public class AbstractExample1 { public static void main(String[] args) { Honda obj=new Honda(); obj.bike(); } }Prova-ho ara
Sortida:
Bike is running
Exemple 2: classe abstracta que conté el mètode abstracte i no abstracte
abstract class Vehicle { abstract void bike(); void car() { System.out.println('Car is running'); } } class Honda extends Vehicle { @Override void bike() { System.out.println('Bike is running'); } } public class AbstractExample2 { public static void main(String[] args) { Honda obj=new Honda(); obj.bike(); obj.car(); } }Prova-ho ara
Sortida:
Bike is running Car is running
Exemple 3: classe abstracta que conté el constructor
abstract class Vehicle { String msg; Vehicle(String msg) { this.msg=msg; } void display() { System.out.println(msg); } } class Honda extends Vehicle { Honda(String msg) { super(msg); } } public class AbstractExample3 { public static void main(String[] args) { Honda obj=new Honda('Constructor is invoked'); obj.display(); } }Prova-ho ara
Sortida:
Constructor is invoked
Exemple 4: classe abstracta que conté mètodes abstractes sobrecarregats
abstract class Vehicle { abstract void display(); abstract void display(String msg); } class Honda extends Vehicle { @Override void display() { System.out.println('abstract method is invoked'); } @Override void display(String msg) { System.out.println(msg); } } public class AbstractExample4 { public static void main(String[] args) { Honda obj=new Honda(); obj.display(); obj.display('overloaded abstract method is invoked'); } }Prova-ho ara
Sortida:
abstract method is invoked overloaded abstract method is invoked
Exemple 5: classe abstracta interna
class Vehicle { abstract class Car { abstract void display(); } class Honda extends Car { @Override void display() { System.out.println('inner abstract class is invoked'); } } } public class AbstractExample5 { public static void main(String[] args) { Vehicle obj=new Vehicle(); Vehicle.Car c=obj.new Honda(); c.display(); } }Prova-ho ara
Sortida:
inner abstract class is invoked
Exemple 6: classe abstracta niuada
abstract class Vehicle { abstract class Car { abstract void display(); } } class Honda extends Vehicle { class FourWheller extends Car { @Override void display() { System.out.println('nested abstract class is invoked'); } } } public class AbstractExample6 { public static void main(String[] args) { Vehicle obj=new Honda(); Honda h=(Honda)obj; Honda.FourWheller fw=h.new FourWheller(); fw.display(); } }Prova-ho ara
Sortida:
nested abstract class is invoked