Ključna beseda abstract se uporablja za doseganje abstrakcije v Javi. Je modifikator brez dostopa, ki se uporablja za ustvarjanje abstraktnega razreda in metode.
Vloga abstraktnega razreda je, da vsebuje abstraktne metode. Lahko pa vsebuje tudi neabstraktne metode. Metoda, ki je deklarirana z abstraktno ključno besedo in nima implementacije, je znana kot abstraktna metoda.
Sintaksa: -
abstract class Employee { abstract void work(); }
Opomba – abstraktnih metod ne moremo deklarirati v neabstraktnem razredu.
Pravila abstraktne ključne besede
Ne
- Abstraktne ključne besede ni mogoče uporabiti s spremenljivkami in konstruktorji.
- Če je razred abstrakten, ga ni mogoče instancirati.
- Če je metoda abstraktna, ne vsebuje telesa.
- Ne moremo uporabiti abstraktne ključne besede z dokončno .
- Abstraktnih metod ne moremo razglasiti kot zasebno .
- Abstraktnih metod ne moremo razglasiti kot statična .
- Abstraktne metode ni mogoče sinhronizirati.
Naredi
- Abstraktno ključno besedo je mogoče uporabiti samo z razredom in metodo.
- Abstraktni razred lahko vsebuje konstruktorje in statične metode.
- Če razred razširi abstraktni razred, mora implementirati tudi vsaj eno od abstraktnih metod.
- Abstraktni razred lahko vsebuje glavno metodo in končno metodo.
- Abstraktni razred lahko vsebuje preobremenjene abstraktne metode.
- Lokalni notranji razred lahko razglasimo za abstrakten.
- Abstraktno metodo lahko deklariramo s klavzulo vrženja.
Primeri abstraktnih ključnih besed
Primer 1: Abstraktni razred, ki vsebuje abstraktno metodo
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(); } }Preizkusite zdaj
Izhod:
Bike is running
Primer 2: Abstraktni razred, ki vsebuje abstraktno in neabstraktno metodo
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(); } }Preizkusite zdaj
Izhod:
Bike is running Car is running
Primer 3: Abstraktni razred, ki vsebuje konstruktor
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(); } }Preizkusite zdaj
Izhod:
Constructor is invoked
Primer 4: Abstraktni razred, ki vsebuje preobremenjene abstraktne metode
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'); } }Preizkusite zdaj
Izhod:
abstract method is invoked overloaded abstract method is invoked
Primer 5: Notranji abstraktni razred
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(); } }Preizkusite zdaj
Izhod:
inner abstract class is invoked
Primer 6: Ugnezdeni abstraktni razred
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(); } }Preizkusite zdaj
Izhod:
nested abstract class is invoked