Klasa koja je deklarirana pomoću ključne riječi apstraktna poznata je kao apstraktna klasa u Java . Može imati apstraktne i neapstraktne metode (metoda s tijelom).
Prije nego što naučimo Java apstraktnu klasu, prvo shvatimo apstrakciju u Javi.
java brojač
Apstrakcija u Javi
Apstrakcija je proces skrivanja detalja implementacije i prikazivanja samo funkcionalnosti korisniku.
Drugi način, prikazuje samo bitne stvari korisniku i skriva interne detalje, na primjer, slanje SMS-a gdje upišete tekst i pošaljete poruku. Ne poznajete internu obradu o isporuci poruke.
Apstrakcija vam omogućuje da se usredotočite na ono što objekt radi umjesto kako to radi.
Načini postizanja apstrakcije
Postoje dva načina za postizanje apstrakcije u Javi
- Apstraktna klasa (0 do 100%)
- Sučelje (100%)
Apstraktna klasa u Javi
Klasa koja je deklarirana kao apstraktna poznata je kao an apstraktna klasa . Može imati apstraktne i neapstraktne metode. Treba ga proširiti i implementirati njegovu metodu. Ne može se instancirati.
Bodovi za pamćenje
- Apstraktna klasa mora biti deklarirana sa apstraktnom ključnom riječi.
- Može imati apstraktne i neapstraktne metode.
- Ne može se instancirati.
- Može imati konstruktori i statičke metode također.
- Može imati finalne metode koje će prisiliti podklasu da ne mijenja tijelo metode.
Primjer apstraktne klase
abstract class A{}
Apstraktna metoda u Javi
Metoda koja je deklarirana kao apstraktna i nema implementaciju poznata je kao apstraktna metoda.
Primjer apstraktne metode
abstract void printStatus();//no method body and abstract
Primjer apstraktne klase koja ima apstraktnu metodu
U ovom primjeru, Bike je apstraktna klasa koja sadrži samo jednu apstraktnu metodu. Njegovu implementaciju osigurava klasa Honda.
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(); } }Testirajte sada
running safely
Razumijevanje stvarnog scenarija apstraktne klase
U ovom primjeru, Shape je apstraktna klasa, a njezinu implementaciju pružaju klase Rectangle i Circle.
Uglavnom, ne znamo za klasu implementacije (koja je skrivena krajnjem korisniku), a objekt klase implementacije je osiguran od strane tvornička metoda .
A tvornička metoda je metoda koja vraća instancu klase. Kasnije ćemo naučiti o tvorničkoj metodi.
U ovom primjeru, ako kreirate instancu klase Rectangle, bit će pozvana metoda draw() klase Rectangle.
Datoteka: 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(); } }Testirajte sada
drawing circle
Još jedan primjer apstraktne klase u Javi
Datoteka: 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()+' %'); }}Testirajte sada
Rate of Interest is: 7 % Rate of Interest is: 8 %
Apstraktna klasa koja ima konstruktor, podatkovni član i metode
Apstraktna klasa može imati podatkovnog člana, apstraktnu metodu, tijelo metode (neapstraktna metoda), konstruktor, pa čak i main() metodu.
umetnite vodeni žig u word
Datoteka: 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(); } }Testirajte sada
bike is created running safely.. gear changed
Pravilo: Ako u klasi postoji apstraktna metoda, ta klasa mora biti apstraktna.
class Bike12{ abstract void run(); }Testirajte sada
compile time error
Pravilo: Ako proširujete apstraktnu klasu koja ima apstraktnu metodu, morate osigurati implementaciju metode ili ovu klasu učiniti apstraktnom.
Još jedan stvarni scenarij apstraktne klase
Apstraktna klasa također se može koristiti za pružanje neke implementacije sučelje . U tom slučaju, krajnji korisnik možda neće biti prisiljen nadjačati sve metode sučelja.
Napomena: Ako ste početnik u Javi, prvo naučite sučelje i preskočite ovaj primjer.
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(); }}Testirajte sada
Output:I am a I am b I am c I am d