Cuvântul cheie abstract este folosit pentru a realiza abstractizarea în Java. Este un modificator fără acces care este folosit pentru a crea o clasă abstractă și o metodă.
Rolul unei clase abstracte este de a conține metode abstracte. Cu toate acestea, poate conține și metode non-abstracte. Metoda care este declarată cu cuvânt cheie abstract și nu are nicio implementare este cunoscută ca metodă abstractă.
Sintaxă:-
abstract class Employee { abstract void work(); }
Notă - Nu putem declara metode abstracte în clasa non-abstractă.
Regulile cuvintelor cheie abstracte
Nu
- Un cuvânt cheie abstract nu poate fi folosit cu variabile și constructori.
- Dacă o clasă este abstractă, nu poate fi instanțiată.
- Dacă o metodă este abstractă, nu conține corpul.
- Nu putem folosi cuvântul cheie abstract cu final .
- Nu putem declara metode abstracte ca privat .
- Nu putem declara metode abstracte ca static .
- O metodă abstractă nu poate fi sincronizată.
A face
- Un cuvânt cheie abstract poate fi folosit numai cu clasă și metodă.
- O clasă abstractă poate conține constructori și metode statice.
- Dacă o clasă extinde clasa abstractă, trebuie să implementeze și cel puțin una dintre metodele abstracte.
- O clasă abstractă poate conține metoda principală și metoda finală.
- O clasă abstractă poate conține metode abstracte supraîncărcate.
- Putem declara clasa interioară locală ca fiind abstractă.
- Putem declara metoda abstractă cu o clauză throw.
Exemple de cuvinte cheie abstracte
Exemplul 1: Clasă abstractă care conține metoda abstractă
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(); } }Testează-l acum
Ieșire:
Bike is running
Exemplul 2: Clasă abstractă care conține metoda abstractă și non-abstractă
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(); } }Testează-l acum
Ieșire:
Bike is running Car is running
Exemplul 3: Clasa abstracta care contine constructorul
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(); } }Testează-l acum
Ieșire:
mylivecricket in for live cricket
Constructor is invoked
Exemplul 4: Clasă abstractă care conține metode abstracte supraîncărcate
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'); } }Testează-l acum
Ieșire:
abstract method is invoked overloaded abstract method is invoked
Exemplul 5: Clasa abstractă interioară
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(); } }Testează-l acum
Ieșire:
inner abstract class is invoked
Exemplul 6: clasă abstractă imbricată
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(); } }Testează-l acum
Ieșire:
nested abstract class is invoked