Abstraktus raktinis žodis naudojamas „Java“ abstrakcijai pasiekti. Tai neprieigos modifikatorius, naudojamas abstrakčiai klasei ir metodui sukurti.
Abstrakčios klasės vaidmuo yra turėti abstrakčius metodus. Tačiau jame gali būti ir neabstrakčių metodų. Metodas, kuris deklaruojamas su abstrakčiu raktiniu žodžiu ir neturi jokio įgyvendinimo, yra žinomas kaip abstraktus metodas.
Sintaksė: -
abstract class Employee { abstract void work(); }
Pastaba – negalime deklaruoti abstrakčių metodų ne abstrakčioje klasėje.
Abstrakčių raktinių žodžių taisyklės
Negalima
- Abstraktus raktinis žodis negali būti naudojamas su kintamaisiais ir konstruktoriais.
- Jei klasė yra abstrakti, ji negali būti kartojama.
- Jei metodas yra abstraktus, jame nėra kūno.
- Negalime naudoti abstraktaus raktinio žodžio su galutinis .
- Negalime paskelbti abstrakčių metodų kaip privatus .
- Negalime paskelbti abstrakčių metodų kaip statinis .
- Abstraktus metodas negali būti sinchronizuojamas.
Daryti
- Abstraktus raktinis žodis gali būti naudojamas tik su klase ir metodu.
- Abstrakčioje klasėje gali būti konstruktorių ir statinių metodų.
- Jei klasė išplečia abstrakčiąją klasę, ji taip pat turi įgyvendinti bent vieną iš abstrakčių metodų.
- Abstrakčioje klasėje gali būti pagrindinis ir galutinis metodas.
- Abstrakčioje klasėje gali būti perkrautų abstrakčių metodų.
- Vietinę vidinę klasę galime paskelbti abstrakčia.
- Abstrakčiąjį metodą galime deklaruoti su metimo sąlyga.
Abstraktaus raktinio žodžio pavyzdžiai
1 pavyzdys: Abstrakti klasė, kurioje yra abstraktus metodas
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(); } }Išbandykite dabar
Išvestis:
Bike is running
2 pavyzdys: Abstrakti klasė, kurioje yra abstraktus ir neabstraktus metodas
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(); } }Išbandykite dabar
Išvestis:
Bike is running Car is running
3 pavyzdys: abstrakčioji klasė, kurioje yra konstruktorius
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(); } }Išbandykite dabar
Išvestis:
Constructor is invoked
4 pavyzdys: Abstrakti klasė, kurioje yra perkrauti abstraktūs metodai
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'); } }Išbandykite dabar
Išvestis:
abstract method is invoked overloaded abstract method is invoked
5 pavyzdys: vidinė abstrakti klasė
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(); } }Išbandykite dabar
Išvestis:
inner abstract class is invoked
6 pavyzdys: Įdėta abstrakti klasė
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(); } }Išbandykite dabar
Išvestis:
nested abstract class is invoked