logo

Abstrakti luokka Javassa

Luokka, joka on ilmoitettu abstraktilla avainsanalla, tunnetaan abstraktina luokkana Java . Siinä voi olla abstrakteja ja ei-abstrakteja menetelmiä (menetelmä kehon kanssa).

Ennen kuin opit Java-abstraktin luokan, ymmärrämme ensin Javan abstraktion.

muurahainen vs maven

Abstraktio Javassa

Abstraktio on prosessi, jossa piilotetaan toteutustiedot ja näytetään vain toiminnallisuus käyttäjälle.

Toinen tapa näyttää käyttäjälle vain olennaiset asiat ja piilottaa sisäiset tiedot, esimerkiksi tekstiviestin lähettämisen, johon kirjoitat tekstin ja lähetät viestin. Et tiedä viestin toimituksen sisäistä käsittelyä.

Abstraktion avulla voit keskittyä siihen, mitä esine tekee sen sijaan, miten se tekee sen.

Tapoja saavuttaa abstraktio

Javassa on kaksi tapaa saavuttaa abstraktio

  1. Abstraktiluokka (0-100 %)
  2. Käyttöliittymä (100 %)

Abstrakti luokka Javassa

Luokka, joka on julistettu abstraktiksi, tunnetaan nimellä an abstrakti luokka . Siinä voi olla abstrakteja ja ei-abstrakteja menetelmiä. Sitä on laajennettava ja sen menetelmä on pantava täytäntöön. Sitä ei voi ilmentää.

Muistettavat kohdat

  • Abstrakti luokka on ilmoitettava abstraktilla avainsanalla.
  • Siinä voi olla abstrakteja ja ei-abstrakteja menetelmiä.
  • Sitä ei voi ilmentää.
  • Se voi olla rakentajat ja myös staattiset menetelmät.
  • Sillä voi olla lopullisia menetelmiä, jotka pakottavat alaluokan olemaan muuttamatta menetelmän runkoa.
Java Abstract -luokan säännöt

Esimerkki abstraktista luokasta

 abstract class A{} 

Abstrakti menetelmä Javassa

Menetelmää, joka on julistettu abstraktiksi ja jolla ei ole toteutusta, kutsutaan abstraktiksi menetelmäksi.

Esimerkki abstraktista menetelmästä

 abstract void printStatus();//no method body and abstract 

Esimerkki abstraktista luokasta, jossa on abstrakti menetelmä

Tässä esimerkissä Bike on abstrakti luokka, joka sisältää vain yhden abstraktin menetelmäajon. Sen toteutuksen tarjoaa Honda-luokka.

 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(); } } 
Testaa nyt
 running safely 

Abstract-luokan todellisen skenaarion ymmärtäminen

Tässä esimerkissä Shape on abstrakti luokka, ja sen toteutuksen tarjoavat suorakulmio- ja ympyräluokat.

Useimmiten emme tiedä toteutusluokkaa (joka on piilotettu loppukäyttäjälle), ja toteutusluokan objektin tarjoaa tehdasmenetelmä .

javascript monirivinen merkkijono

A tehdasmenetelmä on menetelmä, joka palauttaa luokan esiintymän. Opimme tehdasmenetelmästä myöhemmin.

Tässä esimerkissä, jos luot Rectangle-luokan ilmentymän, suorakulmion luokan draw()-metodi kutsutaan.

Tiedosto: 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(); } } 
Testaa nyt
 drawing circle 

Toinen esimerkki abstraktista luokasta Javassa

Tiedosto: 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()+' %'); }} 
Testaa nyt
 Rate of Interest is: 7 % Rate of Interest is: 8 % 

Abstrakti luokka, jossa on konstruktori, datajäsen ja menetelmät

Abstraktilla luokalla voi olla datajäsen, abstrakti menetelmä, metodirunko (ei-abstrakti menetelmä), konstruktori ja jopa main()-metodi.

Tiedosto: 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(); } } 
Testaa nyt
 bike is created running safely.. gear changed 

Sääntö: Jos luokassa on abstrakti menetelmä, luokan on oltava abstrakti.

 class Bike12{ abstract void run(); } 
Testaa nyt
 compile time error 

Sääntö: Jos laajennat abstraktia luokkaa, jossa on abstrakti menetelmä, sinun on joko annettava menetelmän toteutus tai tehtävä tämä luokka abstraktiksi.


Toinen todellinen abstraktin luokan skenaario

Abstraktia luokkaa voidaan käyttää myös jonkinlaisen toteutuksen toteuttamiseen käyttöliittymä . Tällöin loppukäyttäjää ei välttämättä pakoteta ohittamaan kaikkia käyttöliittymän menetelmiä.

Huomautus: Jos olet aloittelija javan käytössä, opi ensin käyttöliittymä ja ohita tämä esimerkki.

 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(); }} 
Testaa nyt
 Output:I am a I am b I am c I am d