O clasă care este declarată cu cuvântul cheie abstract este cunoscută ca o clasă abstractă în Java . Poate avea metode abstracte și non-abstracte (metoda cu corpul).
Înainte de a învăța clasa abstractă Java, să înțelegem mai întâi abstractizarea în Java.
hibernare dialect
Abstracția în Java
Abstracția este un proces de ascundere a detaliilor de implementare și de afișare numai a funcționalității utilizatorului.
În alt mod, îi arată utilizatorului doar lucruri esențiale și ascunde detaliile interne, de exemplu, trimiterea de SMS-uri în care tastați textul și trimiteți mesajul. Nu cunoașteți procesarea internă despre livrarea mesajului.
Abstracția vă permite să vă concentrați asupra a ceea ce obiect face în loc de cum o face.
Modalități de a realiza Abstracția
Există două moduri de a realiza abstractizarea în java
- Clasa abstracte (de la 0 la 100%)
- Interfață (100%)
Clasă abstractă în Java
O clasă care este declarată abstractă este cunoscută ca an clasa abstractă . Poate avea metode abstracte și non-abstracte. Trebuie extins și metoda sa implementată. Nu poate fi instanțiată.
Puncte de reținut
- O clasă abstractă trebuie declarată cu un cuvânt cheie abstract.
- Poate avea metode abstracte și non-abstracte.
- Nu poate fi instanțiată.
- Poate avea constructorii și metode statice, de asemenea.
- Poate avea metode finale care vor forța subclasa să nu schimbe corpul metodei.
Exemplu de clasă abstractă
abstract class A{}
Metoda abstractă în Java
O metodă care este declarată abstractă și nu are implementare este cunoscută ca metodă abstractă.
Exemplu de metodă abstractă
abstract void printStatus();//no method body and abstract
Exemplu de clasă Abstract care are o metodă abstractă
În acest exemplu, Bike este o clasă abstractă care conține doar o singură metodă abstractă. Implementarea sa este asigurată de clasa 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(); } }Testează-l acum
running safely
Înțelegerea scenariului real al clasei Abstract
În acest exemplu, Shape este clasa abstractă, iar implementarea sa este furnizată de clasele Rectangle și Circle.
În mare parte, nu știm despre clasa de implementare (care este ascunsă pentru utilizatorul final), iar un obiect al clasei de implementare este furnizat de către metoda din fabrică .
A metoda din fabrică este o metodă care returnează instanța clasei. Vom afla mai târziu despre metoda din fabrică.
În acest exemplu, dacă creați instanța clasei Rectangle, va fi invocată metoda draw() a clasei Rectangle.
Fișier: TestAbstraction1.java
obiect în programarea 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(); } }Testează-l acum
drawing circle
Un alt exemplu de clasă abstractă în java
Fișier: 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()+' %'); }}Testează-l acum
Rate of Interest is: 7 % Rate of Interest is: 8 %
Clasă abstractă având constructor, membru de date și metode
O clasă abstractă poate avea un membru de date, o metodă abstractă, un corp de metodă (metodă non-abstractă), un constructor și chiar o metodă main().
Fișier: 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(); } }Testează-l acum
bike is created running safely.. gear changed
Regula: Dacă într-o clasă există o metodă abstractă, acea clasă trebuie să fie abstractă.
class Bike12{ abstract void run(); }Testează-l acum
compile time error
Regula: Dacă extindeți o clasă abstractă care are o metodă abstractă, trebuie fie să furnizați implementarea metodei, fie să faceți această clasă abstractă.
Un alt scenariu real de clasă abstractă
Clasa abstractă poate fi, de asemenea, utilizată pentru a oferi o anumită implementare a interfață . În acest caz, este posibil ca utilizatorul final să nu fie forțat să anuleze toate metodele interfeței.
Notă: dacă sunteți începător în java, învățați mai întâi interfața și omiteți acest exemplu.
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(); }}Testează-l acum
Output:I am a I am b I am c I am d