En klass som deklareras med det abstrakta nyckelordet är känd som en abstrakt klass i Java . Det kan ha abstrakta och icke-abstrakta metoder (metod med kroppen).
Innan vi lär oss Java abstrakt klass, låt oss först förstå abstraktionen i Java.
hur man konverterar sträng till heltal
Abstraktion i Java
Abstraktion är en process för att dölja implementeringsdetaljerna och endast visa funktionalitet för användaren.
Ett annat sätt, det visar bara väsentliga saker för användaren och döljer de interna detaljerna, till exempel att skicka SMS där du skriver texten och skickar meddelandet. Du känner inte till den interna behandlingen av meddelandeleveransen.
Abstraktion låter dig fokusera på vad objekt gör istället för hur det gör det.
Sätt att uppnå abstraktion
Det finns två sätt att uppnå abstraktion i java
- Abstrakt klass (0 till 100 %)
- Gränssnitt (100 %)
Abstrakt klass i Java
En klass som deklareras som abstrakt är känd som en abstrakt klass . Det kan ha abstrakta och icke-abstrakta metoder. Det måste utökas och dess metod implementeras. Det går inte att instansiera.
Punkter att komma ihåg
- En abstrakt klass måste deklareras med ett abstrakt nyckelord.
- Det kan ha abstrakta och icke-abstrakta metoder.
- Det går inte att instansiera.
- Det kan det ha konstruktörer och statiska metoder också.
- Den kan ha slutliga metoder som kommer att tvinga underklassen att inte ändra metodens kropp.
Exempel på abstrakt klass
abstract class A{}
Abstrakt metod i Java
En metod som deklareras som abstrakt och inte har implementering är känd som en abstrakt metod.
Exempel på abstrakt metod
abstract void printStatus();//no method body and abstract
Exempel på abstrakt klass som har en abstrakt metod
I det här exemplet är Bike en abstrakt klass som endast innehåller en abstrakt metodkörning. Dess genomförande tillhandahålls av 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(); } }Testa det nu
running safely
Förstå det verkliga scenariot för abstrakt klass
I det här exemplet är Shape den abstrakta klassen, och dess implementering tillhandahålls av klasserna Rectangle och Circle.
För det mesta vet vi inte om implementeringsklassen (som är dold för slutanvändaren), och ett objekt av implementeringsklassen tillhandahålls av fabriksmetod .
A fabriksmetod är en metod som returnerar instansen av klassen. Vi kommer att lära oss om fabriksmetoden senare.
I det här exemplet, om du skapar instansen av klassen Rectangle, kommer metoden draw() för klassen Rectangle att anropas.
java exempelkod
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(); } }Testa det nu
drawing circle
Ett annat exempel på abstrakt klass 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()+' %'); }}Testa det nu
Rate of Interest is: 7 % Rate of Interest is: 8 %
Abstrakt klass med konstruktor, datamedlem och metoder
En abstrakt klass kan ha en datamedlem, abstrakt metod, metodkropp (icke-abstrakt metod), konstruktor och till och med main() metod.
Fil: TestAbstraction2.java
//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(); } }Testa det nu
bike is created running safely.. gear changed
Regel: Om det finns en abstrakt metod i en klass måste den klassen vara abstrakt.
class Bike12{ abstract void run(); }Testa det nu
compile time error
Regel: Om du utökar en abstrakt klass som har en abstrakt metod måste du antingen tillhandahålla implementeringen av metoden eller göra den här klassen abstrakt.
Ett annat verkligt scenario av abstrakt klass
Den abstrakta klassen kan också användas för att tillhandahålla en viss implementering av gränssnitt . I sådana fall kan slutanvändaren inte tvingas att åsidosätta alla metoder i gränssnittet.
Obs: Om du är nybörjare med java, lär dig gränssnittet först och hoppa över det här exemplet.
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(); }}Testa det nu
Output:I am a I am b I am c I am d