Класа која је декларисана помоћу кључне речи апстрактна позната је као апстрактна класа у Јава . Може имати апстрактне и неапстрактне методе (метод са телом).
Пре него што научимо Јава апстрактну класу, хајде да прво разумемо апстракцију у Јави.
нпм цлеан цацхе форце
Апстракција у Јави
Одвајање је процес скривања детаља имплементације и приказивања само функционалности кориснику.
Други начин, показује само битне ствари кориснику и сакрива унутрашње детаље, на пример, слање СМС-а где укуцате текст и пошаљете поруку. Не знате интерну обраду испоруке поруке.
Апстракција вам омогућава да се фокусирате на оно што објекат ради уместо како то ради.
Начини постизања апстракције
Постоје два начина да се постигне апстракција у Јави
- Апстрактна класа (0 до 100%)
- Интерфејс (100%)
Апстрактна класа у Јави
Класа која је декларисана као апстрактна позната је као ан апстрактна класа . Може имати апстрактне и неапстрактне методе. Треба га проширити и применити његов метод. Не може се инстанцирати.
Тачке које треба запамтити
- Апстрактна класа мора бити декларисана са апстрактном кључном речи.
- Може имати апстрактне и неапстрактне методе.
- Не може се инстанцирати.
- Може имати конструктори а такође и статичке методе.
- Може имати коначне методе које ће приморати подкласу да не мења тело методе.
Пример апстрактне класе
abstract class A{}
Апстрактни метод у Јави
Метода која је декларисана као апстрактна и нема имплементацију позната је као апстрактна метода.
Пример апстрактне методе
abstract void printStatus();//no method body and abstract
Пример апстрактне класе која има апстрактни метод
У овом примеру, Бике је апстрактна класа која садржи само једну апстрактну методу. Његову имплементацију обезбеђује класа Хонда.
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
Разумевање стварног сценарија апстрактне класе
У овом примеру, Схапе је апстрактна класа, а његову имплементацију обезбеђују класе Рецтангле и Цирцле.
Углавном не знамо за класу имплементације (која је скривена од крајњег корисника), а објекат класе имплементације обезбеђује фабричка метода .
азбука по броју
А фабричка метода је метод који враћа инстанцу класе. О фабричком методу ћемо сазнати касније.
У овом примеру, ако креирате инстанцу класе Рецтангле, биће позвана метода драв() класе Рецтангле.
Датотека: ТестАбстрацтион1.јава
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
Још један пример апстрактне класе у Јави
Фајл: ТестБанк.јава
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 %
Апстрактна класа која има конструктор, члан података и методе
Апстрактна класа може имати члан података, апстрактни метод, тело методе (неапстрактни метод), конструктор, па чак и маин() метод.
Датотека: ТестАбстрацтион2.јава
//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
Правило: Ако проширујете апстрактну класу која има апстрактни метод, морате или да обезбедите имплементацију методе или да ову класу учините апстрактном.
Још један прави сценарио апстрактне класе
Апстрактна класа се такође може користити да обезбеди неку имплементацију интерфејс . У том случају, крајњи корисник можда неће бити приморан да замени све методе интерфејса.
Напомена: Ако сте почетник у Јави, прво научите интерфејс и прескочите овај пример.
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