Објектно орјентисано
програмирање
Владимир Филиповић
vladaf@matf.bg.ac.rs
Александар Картељ
kartelj@matf.bg.ac.rs
Апстрактне класе и
интерфејси
Владимир Филиповић
vladaf@matf.bg.ac.rs
Александар Картељ
kartelj@matf.bg.ac.rs
Математички факултет (^) {vladafvladaf@matf.bg.ac.,kartelj}@matf.bg.ac.rs rs 3 / 23
Како се крећемо уз хијерархију наслеђивања, класе постају све
општије и све апстрактније.
У неком тренутку наткласа постаје у тој мери општа да више
представља основу за друге класе него класу чије конкретне
примерке желимо да користимо.
Пример:
Проширење хијерархије класа за запослене и студенте.
Иако свака особа има опис,
ипак тај опис зависи од тога шта и
како дата особа ради.
Апстрактне класе
Математички факултет (^) {vladafvladaf@matf.bg.ac.,kartelj}@matf.bg.ac.rs rs 4 / 23
- Апстрактне класе и методе карактерише кључна реч abstract.
- Класа мора бити апстрактна ако садржи бар један апстрактни метод.
- Класа може бити апстрактна чак иако не садржи ни један
апстрактни метод.
public abstract class Person { private String jmbg ; void checkJMBG (){ System. out. println ( “JMBG checking” ); } abstract void doMedicalTreatment (); }
Апстрактне класе (2)
Математички факултет (^) {vladafvladaf@matf.bg.ac.,kartelj}@matf.bg.ac.rs rs 5 / 23
- Примерак конкретне класе може да користи неапстрактне методе
апстрактне наткласе.
public class Student extends Person { private String index ; @Override void doMedicalTreatment () { System. out. println ( “Going to student clinic” ); checkJMBG (); checkIndex (); } void checkIndex (){ System. out. println ( “Checking index” ); } }
Апстрактне класе (3)
Математички факултет (^) {vladafvladaf@matf.bg.ac.,kartelj}@matf.bg.ac.rs rs 6 / 23
- Тај примерак може бити декларисан као инстанца апстрактне класе.
- Он може бити креиран само помоћу конструктора конкретне класе.
- Апстрактна класа може да има конструктор којим дефинише
сопствена поља, а тај контруктор се потом позива од стране
конструктора конкретне поткласе.
public abstract class Person { … public Person ( String jmbg ) { this. jmbg = jmbg ; } … } public class Student extends Person { … public Student ( String jmbg , String index ) { super( jmbg ); this. index = index ; } public static void main ( String [] args ) { Person s =new Student ( “xxxxxxxxxxxxx” , “yyyyy” ); } }
Апстрактне класе (4)
Математички факултет (^) {vladafvladaf@matf.bg.ac.,kartelj}@matf.bg.ac.rs rs 7 / 23
У развоју софтвера је често важно да се различите групе
програмера договоре око „уговора“ о интеракцији софтвера.
Свака од тих група треба да буде у могућности да напише
свој део кода, а да при томе нема информације како је писан
код друге стране.
У језику Јава, интерфејс је референтни тип, сличан класи, али
може садржати само константе и потписе метода.
Интерфејс не може да садржи тела метода (изузетак су
подразумевани методи, почев од Јава 8).
Није могуће директно правити примерак интерфејса:
он само може да буде имплементиран од стране класе
или наслеђен од стране другог интерфејса