logo

Абстрактен клас в Java

Клас, който е деклариран с ключовата дума abstract, е известен като абстрактен клас в Java . Може да има абстрактни и неабстрактни методи (метод с тялото).

Преди да научим абстрактния клас на Java, нека първо разберем абстракцията в Java.

как да извлечете скрити приложения

Абстракция в Java

Абстракция е процес на скриване на подробностите за изпълнението и показване само на функционалност на потребителя.

Друг начин показва само съществени неща на потребителя и скрива вътрешните подробности, например изпращане на SMS, където въвеждате текста и изпращате съобщението. Не знаете вътрешната обработка на доставката на съобщението.

Абстракцията ви позволява да се съсредоточите върху това, което обект прави вместо как го прави.

Начини за постигане на абстракция

Има два начина за постигане на абстракция в java

  1. Абстрактен клас (0 до 100%)
  2. Интерфейс (100%)

Абстрактен клас в Java

Клас, който е деклариран като абстрактен, е известен като an абстрактен клас . Може да има абстрактни и неабстрактни методи. Трябва да се разшири и методът му да се приложи. Не може да бъде инстанциран.

Точки за запомняне

  • Абстрактен клас трябва да бъде деклариран с абстрактна ключова дума.
  • Може да има абстрактни и неабстрактни методи.
  • Не може да бъде инстанциран.
  • Може да има конструктори и статични методи също.
  • Може да има окончателни методи, които ще принудят подкласа да не променя тялото на метода.
Правила за Java Abstract клас

Пример за абстрактен клас

 abstract class A{} 

Абстрактен метод в Java

Метод, който е деклариран като абстрактен и няма реализация, е известен като абстрактен метод.

Пример за абстрактен метод

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

Пример за абстрактен клас, който има абстрактен метод

В този пример Bike е абстрактен клас, който съдържа само един абстрактен метод. Изпълнението му се осигурява от класа на 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(); } } 
Тествайте сега
 running safely 

Разбиране на реалния сценарий на абстрактния клас

В този пример Shape е абстрактният клас и неговата реализация се осигурява от класовете Rectangle и Circle.

Най-често ние не знаем за класа на внедряване (който е скрит за крайния потребител), а обект на класа на изпълнение се предоставя от фабричен метод .

А фабричен метод е метод, който връща екземпляра на класа. По-късно ще научим за фабричния метод.

В този пример, ако създадете екземпляр на клас Rectangle, методът draw() на клас Rectangle ще бъде извикан.

Файл: 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(); } } 
Тествайте сега
 drawing circle 

Друг пример за абстрактен клас в java

Файл: 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()+' %'); }} 
Тествайте сега
 Rate of Interest is: 7 % Rate of Interest is: 8 % 

Абстрактен клас, който има конструктор, член с данни и методи

Абстрактен клас може да има член с данни, абстрактен метод, тяло на метода (неабстрактен метод), конструктор и дори метод main().

Файл: TestAbstraction2.java

скенер.следваща 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(); } } 
Тествайте сега
 bike is created running safely.. gear changed 

Правило: Ако има абстрактен метод в клас, този клас трябва да е абстрактен.

 class Bike12{ abstract void run(); } 
Тествайте сега
 compile time error 

Правило: Ако разширявате абстрактен клас, който има абстрактен метод, трябва или да предоставите изпълнението на метода, или да направите този клас абстрактен.


Друг реален сценарий на абстрактен клас

Абстрактният клас може също да се използва за осигуряване на някаква реализация на интерфейс . В такъв случай крайният потребител може да не бъде принуден да замени всички методи на интерфейса.

Забележка: Ако сте начинаещ в java, първо научете интерфейса и пропуснете този пример.

 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(); }} 
Тествайте сега
 Output:I am a I am b I am c I am d