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
- Abstraktiluokka (0-100 %)
- 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.
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