абстракцията в java е една от важните теми в ориентираното обектно програмиране. резюметата в java са модификатори за класове и функции. абстракцията основно означава скриване на подробности от нашия потребител и показване само на функционалността. те са два начина за използване на абстракция:
- интерфейси
- абстрактни класове
нека първо говоря за абстрактни класове. можем да ги декларираме с „абстрактна“ ключова дума, преди да напишем ключовата дума клас. нека видим някои примери за абстрактни класове, за да имате добра интуиция за тази концепция:
получаване на абсолютната стойност на променлива:
abstract class MyAbsClass{ abstract int getAbslouteValue(int input) ; } public class javacoding extends MyAbsClass { int getAbslouteValue(int input){ return Math.abs(input) ; } public static void main(String args[]){ MyAbsClass object1 = new javacoding() ; System.out.print(object1.getAbslouteValue(-2)) ; // output : 2 }}
Възраст за потвърждаване:
// abstract class abstract class MyAbstractClass { //abstract method abstract void func(); } class UnderAge18 extends MyAbstractClass { void func(){ System.err.print("bro you are under 18") ; } } class OverAge18 extends MyAbstractClass{ void func(){ System.out.print("ok bro") ; }} public class javacoding { public static void main (String args[]){ int age = 19 ; MyAbstractClass Obj1 ; if (age >= 18){ Obj1 = new OverAge18() ; } else { Obj1 = new UnderAge18() ; } Obj1.func() ; // output : ok bro }}
Мисля, че сега имате добра интуиция за абстрактни класове, забележете абстрактната ключова дума преди методите, която написах. ако искате абстрактен клас да модифицира класа, който искате, първо трябва да го наследите, а сега нека навлезем в някои подробности за абстрактните класове:
- Абстрактните класове, също като нормалните класове, могат да имат конструктори, могат да имат нормални методи без абстрактна ключова дума.
- те не могат да бъдат инстанцирани
- те могат да имат крайни методи
- те могат да имат и статични методи
И така, нека да преминем към интерфейсите:
Първо, какво е интерфейс! добре, интерфейсът е син отпечатък на клас. съдържа статични константи и абстрактни методи :D. нека да видим защо интерфейсът е толкова полезен!
- можем да използваме множествено наследяване с тях
- те са лесни за използване
Забележка: Множественото наследяване означава наследяване на два класа в един
сега нека видим някои примери за интерфейс по същата причина, поради която видяхте примери за абстрактни класове:
Показване на дата:
import java.util.Date ; // interface named inter interface inter { void show_date() ; } // implementing class ShowDate implements inter { public void show_date (){ Date d = new Date() ; System.out.print("date is : "+ d.toString()) ; } } public class javacoding { public static void main (String args[]){ ShowDate Object = new ShowDate() ; Object.show_date(); } }
изчисляване на скоростта на светлината за 10 секунди
// our interface interface s { // speed of light static constant final int speed_of_light = 300000 ; } // main class implements public class javacoding implements s { public static void main (String args[]){ // since constants are static i can use them easily int seconds = 10 ; System.out.print("speed of light in 10 sec : \n"+speed_of_light*seconds) ; } }
както можете да видите, трябва да използваме ключовата дума implement за нашия интерфейс и нейният синтаксис е относително лесен
Забележка: интерфейсите могат да имат методи в jdk 1.8