Olio-ohjelmoinnissa abstraktio määritellään tarpeettomien yksityiskohtien piilottamiseksi (toteutus) käyttäjältä ja keskittymiseksi oleellisiin yksityiskohtiin (toiminnallisuus). Se lisää tehokkuutta ja vähentää siten monimutkaisuutta.
Javassa abstraktio voidaan saavuttaa käyttämällä abstrakteja luokat ja menetelmät. Tässä opetusohjelmassa opimme abstrakteista menetelmistä ja niiden käytöstä Javassa.
Abstrakti luokka
Luokka julistetaan abstraktiksi käyttämällä abstrakti avainsana. Siinä voi olla nolla tai enemmän abstrakteja ja ei-abstrakteja menetelmiä. Meidän on laajennettava abstraktia luokkaa ja toteutettava sen menetelmät. Sitä ei voi ilmentää.
Abstraktin luokan syntaksi:
abstract class class_name { //abstract or non-abstract methods }
Huomautus: Abstrakti luokka voi sisältää tai ei sisällä abstrakteja menetelmiä.
Abstrakti menetelmä
Menetelmä, joka on ilmoitettu käyttämällä abstrakti avainsanaa abstraktissa luokassa ja jolla ei ole määritelmää (toteutus), kutsutaan abstraktiksi menetelmäksi.
Kun tarvitsemme superluokassa vain metodimäärityksen, se voidaan saavuttaa ilmoittamalla menetelmät abstrakteiksi.
Abstraktia menetelmää kutsutaan myös alaluokkavastuuksi, koska sillä ei ole toteutusta superluokassa. Siksi aliluokan on ohitettava se antaakseen menetelmän määritelmän.
Abstraktin menetelmän syntaksi:
abstract return_type method_name( [ argument-list ] );
Tässä abstraktilla menetelmällä ei ole metodirunkoa. Sillä voi olla nolla tai useampi argumentti.
Muistettavat kohdat
Seuraavat kohdat ovat tärkeät säännöt Javassa abstraktille menetelmälle:
- Abstraktilla menetelmällä ei ole runkoa (toteutus), niillä on vain menetelmän allekirjoitus (ilmoitus). Abstraktia luokkaa laajentava luokka toteuttaa abstraktit menetelmät.
- Jos ei-abstrakti (konkreettinen) luokka laajentaa abstraktia luokkaa, luokan on toteutettava kaikki kyseisen abstraktin luokan abstraktit menetelmät. Jos ei, konkreettinen luokka on myös ilmoitettava abstraktiksi.
- Koska abstrakteilla menetelmillä on vain allekirjoitus, sen lopussa on oltava puolipiste (;).
- Seuraavat ovat erilaisia laittomat yhdistelmät muut modifikaattorit menetelmille suhteessa abstrakti muuntaja:
- lopullinen
- abstrakti syntyperäinen
- abstrakti synkronoitu
- abstrakti staattinen
- abstrakti yksityinen
- abstrakti strictfp
- Jos luokka sisältää abstraktin menetelmän, sen on oltava abstrakti ja päinvastoin ei ole totta.
Esimerkki abstraktista menetelmästä Javassa
Esimerkki 1:
Seuraavassa esimerkissä opimme, kuinka abstraktio saavutetaan abstraktien luokkien ja abstraktien menetelmien avulla.
AbstractMethodEx1.java
// abstract class abstract class Multiply { // abstract methods // sub class must implement these methods public abstract int MultiplyTwo (int n1, int n2); public abstract int MultiplyThree (int n1, int n2, int n3); // regular method with body public void show() { System.out.println ('Method of abstract class Multiply'); } } // Regular class extends abstract class class AbstractMethodEx1 extends Multiply { // if the abstract methods are not implemented, compiler will give an error public int MultiplyTwo (int num1, int num2) { return num1 * num2; } public int MultiplyThree (int num1, int num2, int num3) { return num1 * num2 * num3; } // main method public static void main (String args[]) { Multiply obj = new AbstractMethodEx1(); System.out.println ('Multiplication of 2 numbers: ' + obj.MultiplyTwo (10, 50)); System.out.println ('Multiplication of 3 numbers: ' + obj.MultiplyThree (5, 8, 10)); obj.show(); } }
Lähtö:
Esimerkki 2:
Oletuksena kaikki käyttöliittymän menetelmät ovat julkisia ja abstrakteja. Rajapinta ei voi sisältää konkreettisia menetelmiä eli tavallisia menetelmiä, joissa on runko.
AbstractMethodEx2.java
// interface interface SquareCube { // abstract methods public abstract int squareNum (int n); // it not necessary to add public and abstract keywords // as the methods in interface are public abstract by default int cubeNum (int n); // regular methods are not allowed in an interface // if we uncomment this method, compiler will give an error /*public void disp() { System.out.println ('I will give error if u uncomment me'); } */ } public class AbstractMethodEx2 implements SquareCube { // defining the abstract methods of interface public int squareNum (int num) { return num * num; } public int cubeNum (int num) { return num * num * num; } // main method public static void main(String args[]){ SquareCube obj = new AbstractMethodEx2(); System.out.println('Square of number is: ' + obj.squareNum (7) ); System.out.println('Cube of number is: ' + obj.cubeNum (7)); } }
Lähtö:
Tällä tavalla olemme oppineet abstraktista menetelmästä ja sen toteutuksesta Javassa.