En klasse, der er erklæret med det abstrakte nøgleord, er kendt som en abstrakt klasse i Java . Det kan have abstrakte og ikke-abstrakte metoder (metode med kroppen).
Før vi lærer Java abstrakt-klassen, lad os først forstå abstraktionen i Java.
konverter boolesk til streng
Abstraktion i Java
Abstraktion er en proces med at skjule implementeringsdetaljerne og kun vise funktionalitet til brugeren.
En anden måde, det viser kun væsentlige ting til brugeren og skjuler de interne detaljer, for eksempel at sende SMS, hvor du skriver teksten og sender beskeden. Du kender ikke den interne behandling af meddelelsesleveringen.
Abstraktion lader dig fokusere på, hvad der objekt gør i stedet for hvordan den gør det.
Måder at opnå abstraktion på
Der er to måder at opnå abstraktion på i java
- Abstrakt klasse (0 til 100 %)
- Interface (100 %)
Abstrakt klasse i Java
En klasse, der er erklæret som abstrakt, er kendt som en abstrakt klasse . Det kan have abstrakte og ikke-abstrakte metoder. Det skal udvides, og dets metode skal implementeres. Det kan ikke instantieres.
Punkter at huske
- En abstrakt klasse skal erklæres med et abstrakt nøgleord.
- Det kan have abstrakte og ikke-abstrakte metoder.
- Det kan ikke instantieres.
- Det kan have konstruktører og statiske metoder også.
- Det kan have endelige metoder, som vil tvinge underklassen til ikke at ændre metodens krop.
Eksempel på abstrakt klasse
abstract class A{}
Abstrakt metode i Java
En metode, der er erklæret som abstrakt og ikke har implementering, er kendt som en abstrakt metode.
Eksempel på abstrakt metode
abstract void printStatus();//no method body and abstract
Eksempel på abstrakt klasse, der har en abstrakt metode
I dette eksempel er Bike en abstrakt klasse, der kun indeholder én abstrakt metodekørsel. Dens implementering leveres af Honda-klassen.
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(); } }Test det nu
running safely
Forstå det virkelige scenarie for abstrakt klasse
I dette eksempel er Shape den abstrakte klasse, og dens implementering leveres af klasserne Rectangle og Circle.
For det meste kender vi ikke til implementeringsklassen (som er skjult for slutbrugeren), og et objekt af implementeringsklassen leveres af fabriksmetode .
EN fabriksmetode er en metode, der returnerer forekomsten af klassen. Vi lærer om fabriksmetoden senere.
I dette eksempel, hvis du opretter forekomsten af klassen Rectangle, vil draw()-metoden i klassen Rectangle blive aktiveret.
Fil: 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(); } }Test det nu
drawing circle
Et andet eksempel på abstrakt klasse i java
Fil: 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()+' %'); }}Test det nu
Rate of Interest is: 7 % Rate of Interest is: 8 %
Abstrakt klasse med konstruktør, datamedlem og metoder
En abstrakt klasse kan have et datamedlem, abstrakt metode, metodelegeme (ikke-abstrakt metode), konstruktør og endda main() metode.
Fil: TestAbstraction2.java
amplitudemodulation
//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(); } }Test det nu
bike is created running safely.. gear changed
Regel: Hvis der er en abstrakt metode i en klasse, skal den klasse være abstrakt.
class Bike12{ abstract void run(); }Test det nu
compile time error
Regel: Hvis du udvider en abstrakt klasse, der har en abstrakt metode, skal du enten sørge for implementeringen af metoden eller gøre denne klasse abstrakt.
Endnu et virkeligt scenarie med abstrakt klasse
Den abstrakte klasse kan også bruges til at give en vis implementering af interface . I sådanne tilfælde er slutbrugeren muligvis ikke tvunget til at tilsidesætte alle grænsefladens metoder.
Bemærk: Hvis du er nybegynder til java, skal du først lære interface og springe dette eksempel over.
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(); }}Test det nu
Output:I am a I am b I am c I am d