Professional Documents
Culture Documents
NP1718 02.JAVA Voved2
NP1718 02.JAVA Voved2
Напредно
програмирање
Предавање 2
Класи, наследување,
полиморфизам, интерфејси
Вон. проф. д-р Ѓорѓи Маџаров
НП - вовед
ФАКУЛТЕТ ЗА ИНФОРМАТИЧКИ НАУКИ
И КОМПЈУТЕРСКО ИНЖЕНЕРСТВО
Wrapper класи
Wrapper класите обезбедуваат класен тип за
соодветните примитивни типови
Ова овозможува да постојат класи кои ќе се
однесуваат како примитивните податочни типови
Wrapper класите за примитивните податочни
типови byte, short, long, float, double и char
се (во редослед) Byte, Short, Long, Float,
Double и Character
Wrapper класите дополнително содржат и
корисни константи и static методи
НАПРЕДНО ПРОГРАМИРАЊЕ 2
НП - вовед
ФАКУЛТЕТ ЗА ИНФОРМАТИЧКИ НАУКИ
И КОМПЈУТЕРСКО ИНЖЕНЕРСТВО
Wrapper класи
Boxing: процесот на трансформирање на
вредноста на примитивен податочен тип во
објект од соодветна wrapper класа
За конверзија на вредност на примитивен
податочен тип во „еквивалентна“ вредност од
класен тип, треба да се креира објект од
соодветната wrapper класа користејќи ја
примитивната вредност како аргумент
Новиот објект ќе содржи копија од примитивната
вредност
За разлика од другите класи, wrapper класите
немаат дефиниција на конструктор без аргументи
Integer integerObject = new Integer(42);
НАПРЕДНО ПРОГРАМИРАЊЕ 3
НП - вовед
ФАКУЛТЕТ ЗА ИНФОРМАТИЧКИ НАУКИ
И КОМПЈУТЕРСКО ИНЖЕНЕРСТВО
Wrapper класи
Unboxing: процесот на трансформирање на
објект од wrapper класа во вредност од
соодветниот примитивен податочен тип
Методите кои ги конвертираат објектите од
wrapper класите Byte, Short, Integer, Long,
Float, Double и Character во нивните
соодветни примитивни типови се (во редослед)
byteValue, shortValue, intValue, longValue,
floatValue, doubleValue, and charValue
Овие методи не примаат аргумент
int i = integerObject.intValue();
НАПРЕДНО ПРОГРАМИРАЊЕ 4
НП - вовед
ФАКУЛТЕТ ЗА ИНФОРМАТИЧКИ НАУКИ
И КОМПЈУТЕРСКО ИНЖЕНЕРСТВО
Wrapper класи
Стартувајќи со верзија 5.0, Java автоматски може да
прави boxing и unboxing
Наместо креирање на објект од wrapper класа
користејќи го операторот new (како што е прикажано
претходно), тоа се прави преку автоматско
кастирање на типови:
Integer integerObject = 42;
Слично и за обратниот процес
int i = integerObject;
НАПРЕДНО ПРОГРАМИРАЊЕ 5
НП - вовед
ФАКУЛТЕТ ЗА ИНФОРМАТИЧКИ НАУКИ
И КОМПЈУТЕРСКО ИНЖЕНЕРСТВО
НАПРЕДНО ПРОГРАМИРАЊЕ 6
НП - вовед
ФАКУЛТЕТ ЗА ИНФОРМАТИЧКИ НАУКИ
класата (1 од 3)
НАПРЕДНО ПРОГРАМИРАЊЕ 7
НП - вовед
ФАКУЛТЕТ ЗА ИНФОРМАТИЧКИ НАУКИ
класата (2 од 3)
НАПРЕДНО ПРОГРАМИРАЊЕ 8
НП - вовед
ФАКУЛТЕТ ЗА ИНФОРМАТИЧКИ НАУКИ
класата (3 од 3)
НАПРЕДНО ПРОГРАМИРАЊЕ 9
НП - вовед
ФАКУЛТЕТ ЗА ИНФОРМАТИЧКИ НАУКИ
И КОМПЈУТЕРСКО ИНЖЕНЕРСТВО
НАПРЕДНО ПРОГРАМИРАЊЕ 10
НП - вовед
ФАКУЛТЕТ ЗА ИНФОРМАТИЧКИ НАУКИ
И КОМПЈУТЕРСКО ИНЖЕНЕРСТВО
НАПРЕДНО ПРОГРАМИРАЊЕ 11
НП - вовед
ФАКУЛТЕТ ЗА ИНФОРМАТИЧКИ НАУКИ
И КОМПЈУТЕРСКО ИНЖЕНЕРСТВО
НАПРЕДНО ПРОГРАМИРАЊЕ 12
НП - вовед
ФАКУЛТЕТ ЗА ИНФОРМАТИЧКИ НАУКИ
И КОМПЈУТЕРСКО ИНЖЕНЕРСТВО
НАПРЕДНО ПРОГРАМИРАЊЕ 13
НП - вовед
ФАКУЛТЕТ ЗА ИНФОРМАТИЧКИ НАУКИ
И КОМПЈУТЕРСКО ИНЖЕНЕРСТВО
НАПРЕДНО ПРОГРАМИРАЊЕ 14
НП - вовед
ФАКУЛТЕТ ЗА ИНФОРМАТИЧКИ НАУКИ
И КОМПЈУТЕРСКО ИНЖЕНЕРСТВО
НАПРЕДНО ПРОГРАМИРАЊЕ 15
НП - вовед
ФАКУЛТЕТ ЗА ИНФОРМАТИЧКИ НАУКИ
И КОМПЈУТЕРСКО ИНЖЕНЕРСТВО
Лексикографско и алфабетско
споредување
Лексикографското подредување е исто како и ASCII
подредувањето, вклучувајќи ги буквите, цифрите и останатите
карактери
Сите големи и мали букви се алфабетски подредени, но сите
големи букви се пред малите
Ако s1 и s2 се две променливи од тип String на кои им се дадени
вредности од String тип тогаш s1.compareTo(s2) враќа
негативен број ако s1 е лексикографски пред s2, враќа нула ако
двете вредности се еднакви и враќа позитивен број ако s2 е
лексикографски пред s1
Алфабетското споредување е овозможено со методот
compareToIgnoreCase
НАПРЕДНО ПРОГРАМИРАЊЕ 16
НП - вовед
ФАКУЛТЕТ ЗА ИНФОРМАТИЧКИ НАУКИ
И КОМПЈУТЕРСКО ИНЖЕНЕРСТВО
НАПРЕДНО ПРОГРАМИРАЊЕ 17
НП - вовед
ФАКУЛТЕТ ЗА ИНФОРМАТИЧКИ НАУКИ
И КОМПЈУТЕРСКО ИНЖЕНЕРСТВО
НАПРЕДНО ПРОГРАМИРАЊЕ 18
НП - вовед
ФАКУЛТЕТ ЗА ИНФОРМАТИЧКИ НАУКИ
И КОМПЈУТЕРСКО ИНЖЕНЕРСТВО
НАПРЕДНО ПРОГРАМИРАЊЕ 19
НП - вовед
ФАКУЛТЕТ ЗА ИНФОРМАТИЧКИ НАУКИ
И КОМПЈУТЕРСКО ИНЖЕНЕРСТВО
Полиња и референци
Како и класните типови, променлива од
тип поле е референца
Полињата се објекти
Променливата од тип поле ја содржи
адресата на чија локација е сместен поле
објектот во меморијата
Поле типот (вообичаено) се смета за
класен тип
НАПРЕДНО ПРОГРАМИРАЊЕ 20
НП - вовед
ФАКУЛТЕТ ЗА ИНФОРМАТИЧКИ НАУКИ
И КОМПЈУТЕРСКО ИНЖЕНЕРСТВО
Полињата се објекти
Полињата можат да бидат разгледувани како
колекција од индексирани променливи
Полињата можат да бидат разгледувани и како
единствени целини чии вредности се колекции од
вредности од основниот тип
double[] a;
a = new double[10];
Треба да се забележи дека new операторот кој го
креира полето всушност повикува конструктор
користејќи нестандардна синтакса
Во претходниот пример a содржи една единствена
вредност: мемориската адреса на полето односно
неговата референца
НАПРЕДНО ПРОГРАМИРАЊЕ 21
НП - вовед
ФАКУЛТЕТ ЗА ИНФОРМАТИЧКИ НАУКИ
И КОМПЈУТЕРСКО ИНЖЕНЕРСТВО
Вовед во наследување
Наследувањето е една од основните техники на
објектно ориентираното програмирање
Изведената класа автоматски ги наследува сите
променливи на инстанца и методи дефинирани во
основната класа, а може дополнително да дефинира
и нови променливи на инстанца и методи
Наследувањето е особено значајно затоа што
дозволува искористување на претходно напишаниот
код, без да има потреба за негово копирање во
изведените класи
НАПРЕДНО ПРОГРАМИРАЊЕ 22
НП - вовед
ФАКУЛТЕТ ЗА ИНФОРМАТИЧКИ НАУКИ
И КОМПЈУТЕРСКО ИНЖЕНЕРСТВО
Препокривање на методи
Дефинициите на наследените променливи и
методи не се појавуваат во изведените класи
Кодот се користи без негова експлицитна копија во
изведената класа, со исклучок на методите кои се
редефинираат.
Иако изведената класа ги наследува
методите од основната класа, сепак таа може
да ги промени или препокрие истите ако е
потребно
За да се препокрие дефиниција на веќе постоечки
метод, потребно е неговата нова дефиниција
едноставно да се постави во дефиницијата на
класата, слично како и за сите останати методи
НАПРЕДНО ПРОГРАМИРАЊЕ 23
НП - вовед
ФАКУЛТЕТ ЗА ИНФОРМАТИЧКИ НАУКИ
И КОМПЈУТЕРСКО ИНЖЕНЕРСТВО
НАПРЕДНО ПРОГРАМИРАЊЕ 25
НП - вовед
ФАКУЛТЕТ ЗА ИНФОРМАТИЧКИ НАУКИ
И КОМПЈУТЕРСКО ИНЖЕНЕРСТВО
НАПРЕДНО ПРОГРАМИРАЊЕ 26
НП - вовед
ФАКУЛТЕТ ЗА ИНФОРМАТИЧКИ НАУКИ
И КОМПЈУТЕРСКО ИНЖЕНЕРСТВО
НАПРЕДНО ПРОГРАМИРАЊЕ 27
НП - вовед
ФАКУЛТЕТ ЗА ИНФОРМАТИЧКИ НАУКИ
И КОМПЈУТЕРСКО ИНЖЕНЕРСТВО
Препокривање наспроти
преоптоварување
Не треба да се мешаат термините за
препокривање на метод во изведена класа со
преоптоварување на име на метод
Кога методот е препокриен, дефиницијата на
методот дадена во изведената класа го има
истиот број и типови на параметри како и во
основната класа
Кога метод во изведената класа има различен
потпис од методот во основната класа станува
збор за преоптоварување
Треба да се забележи дека при
преоптоварувањето во изведената класа на
оригиналниот метод, истиот сеуште се наследува
и може да се користи
НАПРЕДНО ПРОГРАМИРАЊЕ 28
НП - вовед
ФАКУЛТЕТ ЗА ИНФОРМАТИЧКИ НАУКИ
И КОМПЈУТЕРСКО ИНЖЕНЕРСТВО
final модификаторот
Ако модификаторот final се употреби
кај некој метод, тогаш тој неможе да се
редефинира во рамки на изведените
класи
Ако модификаторот final се употреби
при дефиниција на класа, тогаш таа
класа неможе да биде основна, односно
од неа неможе да се изведуваат други
класи
НАПРЕДНО ПРОГРАМИРАЊЕ 29
НП - вовед
ФАКУЛТЕТ ЗА ИНФОРМАТИЧКИ НАУКИ
И КОМПЈУТЕРСКО ИНЖЕНЕРСТВО
super конструктор
Изведената класа го користи конструкторот на
основната класа за да ги иницијализира сите
податочни членови наследени од основната класа
За да се повика конструкторот на основната класа се
користи посебна синтакса:
public derivedClass(int p1, int p2, double p3)
{
super(p1, p2);
instanceVariable = p3;
}
Во претходниот пример, super(p1, p2); е повик на
конструктор од основната класа
НАПРЕДНО ПРОГРАМИРАЊЕ 30
НП - вовед
ФАКУЛТЕТ ЗА ИНФОРМАТИЧКИ НАУКИ
И КОМПЈУТЕРСКО ИНЖЕНЕРСТВО
super конструктор
Повикот на конструкторот на основната класа
неможе да се направи преку името на основната
класа. Наместо името на основната класа се користи
резервираниот збор super
Повикот на super секогаш мора да биде првата
наредба при дефиниција на конструкторот
Променлива на инстанцна неможе да се користи како
аргумент на super
НАПРЕДНО ПРОГРАМИРАЊЕ 31
НП - вовед
ФАКУЛТЕТ ЗА ИНФОРМАТИЧКИ НАУКИ
И КОМПЈУТЕРСКО ИНЖЕНЕРСТВО
super конструктор
Ако конструкторот на изведената класа не
вклучува повик на super, тогаш автоматски
се повикува конструкторот без аргументи од
основната класа
Ова може да резултира во грешка ако не е
дефиниран конструктор без аргументи
Ако е потребно изведените променливи на
инстанца да бидат иницијализирани и за тоа
постои конструктор во основната класа,
тогаш експлицитен повик на super треба да
се користи
НАПРЕДНО ПРОГРАМИРАЊЕ 32
НП - вовед
ФАКУЛТЕТ ЗА ИНФОРМАТИЧКИ НАУКИ
И КОМПЈУТЕРСКО ИНЖЕНЕРСТВО
this конструктор
Во дефиниција на конструктор на класа, this
може да биде употребен за повик на друг
конструктор од истата класа
Начинот на користење е ист како и кај super
конструкторот
Ако е неопходно да се направи повик до
super и this, повикот користејќи го this
мора прв да биде направен. Потоа првата
акција која ќе ја направи конструкторот кој е
повикан мора да биде повикот на super
НАПРЕДНО ПРОГРАМИРАЊЕ 33
НП - вовед
ФАКУЛТЕТ ЗА ИНФОРМАТИЧКИ НАУКИ
И КОМПЈУТЕРСКО ИНЖЕНЕРСТВО
this конструктор
public HourlyEmployee()
{
this("No name", new Date(), 0, 0);
}
Претходно напишаниот конструктор го
повикува конструкторот со следното
заглавие:
public HourlyEmployee(String theName,
Date theDate, double theWageRate, double
theHours)
НАПРЕДНО ПРОГРАМИРАЊЕ 34
НП - вовед
ФАКУЛТЕТ ЗА ИНФОРМАТИЧКИ НАУКИ
И КОМПЈУТЕРСКО ИНЖЕНЕРСТВО
НАПРЕДНО ПРОГРАМИРАЊЕ 35
НП - вовед
ФАКУЛТЕТ ЗА ИНФОРМАТИЧКИ НАУКИ
И КОМПЈУТЕРСКО ИНЖЕНЕРСТВО
Енкапсулација и наследување
Променлива на инстанца која е дефинирана како
private во основната класа неможе да се пристапи во
метод дефиниран во било која друга класа, дури и во
метод дефиниран во изведена класа
Приватните променливи на инстанца можат да бидат
пристапени само од методи дефинирани во истата
класа
Објект од HourlyEmployee класата може да ги користи
getHireDate или setHireDate методите (дефинирани
како public) за пристап на приватната променлива hireDate
НАПРЕДНО ПРОГРАМИРАЊЕ 36
НП - вовед
ФАКУЛТЕТ ЗА ИНФОРМАТИЧКИ НАУКИ
И КОМПЈУТЕРСКО ИНЖЕНЕРСТВО
Енкапсулација и наследување
Приватните методи од основната класа се како
приватните променливи во смисла на дозволата на
пристап
Приватните методи се комплетно недостапни, освен
ако не бидат повикани индиректно
Ова е возможно ако објект од изведената класа повика јавен
метод од основната класа, кој пак го повикува соодветниот
приватен метод
Ова не би требало да биде проблем затоа што
приватните методи се користат како помошни методи
Ако методот не е само помошен метод тогаш тој треба да
биде дефиниран како public, а не private
НАПРЕДНО ПРОГРАМИРАЊЕ 37
НП - вовед
ФАКУЛТЕТ ЗА ИНФОРМАТИЧКИ НАУКИ
И КОМПЈУТЕРСКО ИНЖЕНЕРСТВО
НАПРЕДНО ПРОГРАМИРАЊЕ 38
НП - вовед
ФАКУЛТЕТ ЗА ИНФОРМАТИЧКИ НАУКИ
И КОМПЈУТЕРСКО ИНЖЕНЕРСТВО
НАПРЕДНО ПРОГРАМИРАЊЕ 39
НП - вовед
ФАКУЛТЕТ ЗА ИНФОРМАТИЧКИ НАУКИ
И КОМПЈУТЕРСКО ИНЖЕНЕРСТВО
НАПРЕДНО ПРОГРАМИРАЊЕ 40
НП - вовед
ФАКУЛТЕТ ЗА ИНФОРМАТИЧКИ НАУКИ
И КОМПЈУТЕРСКО ИНЖЕНЕРСТВО
Модификатори на пристап
НАПРЕДНО ПРОГРАМИРАЊЕ 41
НП - вовед
ФАКУЛТЕТ ЗА ИНФОРМАТИЧКИ НАУКИ
И КОМПЈУТЕРСКО ИНЖЕНЕРСТВО
За дома...
Класите A и B се наоѓаат во различен
package. Ако класата B наследува од класата
A и класата A има променлива n дефинирана
како protected, кои од следниве тврдења се
точни:
Метод од класата B може директно да пристапи на
n
Метод од класата B може да креира локален
објект од истата класа и преку него да пристапи на
n
Метод од класата B може да креира објект од
класата A и преку него да пристапи на n
НАПРЕДНО ПРОГРАМИРАЊЕ 42
НП - вовед
ФАКУЛТЕТ ЗА ИНФОРМАТИЧКИ НАУКИ
И КОМПЈУТЕРСКО ИНЖЕНЕРСТВО
Static променливите се
наследуваат
Static променливите од основната класа
се наследуваат во сите изведени класи
Модификаторите public, private и
protected и пристап во пакет го имаат
истото значење за static променливите
како и за променливите на инстанца
НАПРЕДНО ПРОГРАМИРАЊЕ 43
НП - вовед
ФАКУЛТЕТ ЗА ИНФОРМАТИЧКИ НАУКИ
И КОМПЈУТЕРСКО ИНЖЕНЕРСТВО
НАПРЕДНО ПРОГРАМИРАЊЕ 44
НП - вовед
ФАКУЛТЕТ ЗА ИНФОРМАТИЧКИ НАУКИ
И КОМПЈУТЕРСКО ИНЖЕНЕРСТВО
Класата Object
Класата Object се наоѓа во пакетот
java.lang кој автоматски се импортира
Ова овозможува методите да бидат
пишувани со параметри од тип Object
Параметаротод тип Object може да биде
заменет со објект од било која класа
Класата Object има некои методи кои секоја Java
класа ги наследува
Како пример, методите equals и toString
Секој објект ги наследува овие методи од некоја
предок класа
Овие наследени методи треба да бидат препокриени
со дефиниции кои многу повеќе соодветствуваат на
класата
НАПРЕДНО ПРОГРАМИРАЊЕ 45
НП - вовед
ФАКУЛТЕТ ЗА ИНФОРМАТИЧКИ НАУКИ
И КОМПЈУТЕРСКО ИНЖЕНЕРСТВО
НАПРЕДНО ПРОГРАМИРАЊЕ 46
НП - вовед
ФАКУЛТЕТ ЗА ИНФОРМАТИЧКИ НАУКИ
И КОМПЈУТЕРСКО ИНЖЕНЕРСТВО
НАПРЕДНО ПРОГРАМИРАЊЕ 47
НП - вовед
ФАКУЛТЕТ ЗА ИНФОРМАТИЧКИ НАУКИ
И КОМПЈУТЕРСКО ИНЖЕНЕРСТВО
instanceof оператор
instanceof операторот проверува
дали објектот е од типот зададен како
втор аргумент
object instanceof ClassName
Ова враќа true ако object е од тип
ClassName, а во спротивно враќа false
Ова значи дека ќе биде вратено true ако
object е инстанца од било која изведена
класа од ClassName
НАПРЕДНО ПРОГРАМИРАЊЕ 48
НП - вовед
ФАКУЛТЕТ ЗА ИНФОРМАТИЧКИ НАУКИ
И КОМПЈУТЕРСКО ИНЖЕНЕРСТВО
getclass() метод
Секој објект го наследува истиот getClass()
метод од Object класата
Овој метод е означен како final, така што
неможе да биде препокриен
Повикувањето на getClass() враќа
репрезентација на класата која била
користена од операторот new при креирање
на објектот
Резултатите добиени од два повика на овој метод
можат да бидат споредени со == или != за да се
одреди дали тие се репрезенти на иста класа
(object1.getClass() == object2.getClass())
НАПРЕДНО ПРОГРАМИРАЊЕ 49
НП - вовед
ФАКУЛТЕТ ЗА ИНФОРМАТИЧКИ НАУКИ
И КОМПЈУТЕРСКО ИНЖЕНЕРСТВО
Вовед во полиморфизам
Наследувањето дозволува да се дефинира
основна класа и други класи наследени од
неа
Кодот од основната класа може да се користи од
нејзините објекти, како и објектите од изведените
класи
Полиморфизмот дозволува да бидат
направени промени во дефинициите на
методите во изведените класи и тие промени
се однесуваат на софтверот напишан во
основната класа
НАПРЕДНО ПРОГРАМИРАЊЕ 50
НП - вовед
ФАКУЛТЕТ ЗА ИНФОРМАТИЧКИ НАУКИ
И КОМПЈУТЕРСКО ИНЖЕНЕРСТВО
Late Binding
Процесот на поврзување на
дефиницијата на методот со повикот на
методот се нарекува binding
Кога дефиницијата на методот се
поврзува со неговото повикување при
компајлирање на програмата, тогаш
станува збор за early binding
Кога дефиницијата на методот се
поврзува со неговото повикување во
моментот на извршување на
програмата, тогаш станува збор за late
binding или dynamic binding
НАПРЕДНО ПРОГРАМИРАЊЕ 51
НП - вовед
ФАКУЛТЕТ ЗА ИНФОРМАТИЧКИ НАУКИ
И КОМПЈУТЕРСКО ИНЖЕНЕРСТВО
Late Binding
Java користи late binding за сите методи
(освен за приватните, final и static
методите)
Како резултат на late binding-от,
методот може да биде напишан во
основната класа, дури и ако делови од
него сеуште не се дефинирани
Како пример ќе бидат користени
класите Sale и нејзината изведена
класа DiscountSale
НАПРЕДНО ПРОГРАМИРАЊЕ 52
НП - вовед
ФАКУЛТЕТ ЗА ИНФОРМАТИЧКИ НАУКИ
И КОМПЈУТЕРСКО ИНЖЕНЕРСТВО
НАПРЕДНО ПРОГРАМИРАЊЕ 53
НП - вовед
ФАКУЛТЕТ ЗА ИНФОРМАТИЧКИ НАУКИ
И КОМПЈУТЕРСКО ИНЖЕНЕРСТВО
НАПРЕДНО ПРОГРАМИРАЊЕ 54
НП - вовед
ФАКУЛТЕТ ЗА ИНФОРМАТИЧКИ НАУКИ
И КОМПЈУТЕРСКО ИНЖЕНЕРСТВО
НАПРЕДНО ПРОГРАМИРАЊЕ 55
НП - вовед
ФАКУЛТЕТ ЗА ИНФОРМАТИЧКИ НАУКИ
И КОМПЈУТЕРСКО ИНЖЕНЕРСТВО
НАПРЕДНО ПРОГРАМИРАЊЕ 56
НП - вовед
ФАКУЛТЕТ ЗА ИНФОРМАТИЧКИ НАУКИ
И КОМПЈУТЕРСКО ИНЖЕНЕРСТВО
НАПРЕДНО ПРОГРАМИРАЊЕ 57
НП - вовед
ФАКУЛТЕТ ЗА ИНФОРМАТИЧКИ НАУКИ
И КОМПЈУТЕРСКО ИНЖЕНЕРСТВО
НАПРЕДНО ПРОГРАМИРАЊЕ 58
НП - вовед
ФАКУЛТЕТ ЗА ИНФОРМАТИЧКИ НАУКИ
И КОМПЈУТЕРСКО ИНЖЕНЕРСТВО
НАПРЕДНО ПРОГРАМИРАЊЕ 59
НП - вовед
ФАКУЛТЕТ ЗА ИНФОРМАТИЧКИ НАУКИ
И КОМПЈУТЕРСКО ИНЖЕНЕРСТВО
final модификатор
Методот означен како final неможе да се
препокрие со нова дефиниција во изведените
класи
Ако методот е означен како final, компајлерот
користи early binding
public final void someMethod() { . . . }
НАПРЕДНО ПРОГРАМИРАЊЕ 60
НП - вовед
ФАКУЛТЕТ ЗА ИНФОРМАТИЧКИ НАУКИ
И КОМПЈУТЕРСКО ИНЖЕНЕРСТВО
Upcasting и Downcasting
Upcasting е кога објект од изведена класа се
придружува на променлива од основната класа
Sale saleVariable; //Base class
DiscountSale discountVariable = new
DiscountSale("paint", 15,10); //Derived class
saleVariable = discountVariable; //Upcasting
System.out.println(saleVariable.toString());
НАПРЕДНО ПРОГРАМИРАЊЕ 61
НП - вовед
ФАКУЛТЕТ ЗА ИНФОРМАТИЧКИ НАУКИ
И КОМПЈУТЕРСКО ИНЖЕНЕРСТВО
Upcasting и Downcasting
Downcasting е кога кастирањето се прави од основна
класа во изведена (или од предок класа во изведена
класа)
Downcasting-от треба да се изведува многу внимателно
Во многу случаеви тоа нема никаква смисла или е илегално:
discountVariable = //will produce
(DiscountSale)saleVariable;//run-time error
discountVariable = saleVariable //will produce
//compiler error
Како и да е downcasting-от некогаш е неопходен, на пр. во
методот equals:
Sale otherSale = (Sale)otherObject;//downcasting
НАПРЕДНО ПРОГРАМИРАЊЕ 62
НП - вовед
ФАКУЛТЕТ ЗА ИНФОРМАТИЧКИ НАУКИ
И КОМПЈУТЕРСКО ИНЖЕНЕРСТВО
clone метод
Секој објект го наследува методот clone од
класата Object
Методот clone нема параметри
Се претпоставува дека тој треба да врати deep
copy од повикувачкиот објект
НАПРЕДНО ПРОГРАМИРАЊЕ 63
НП - вовед
ФАКУЛТЕТ ЗА ИНФОРМАТИЧКИ НАУКИ
И КОМПЈУТЕРСКО ИНЖЕНЕРСТВО
clone метод
Заглавието на clone методот дефиниран во
Object класата е:
protected Object clone()
Заглавието на clone методот кој го
препокрива истиот метод на Object класата
може да се разликува во:
Дозвола на пристап. Дозволата за пристап може
да биде променета од protected во public. Ова е
секогаш дозволено кога се препокрива некој метод
Типот на податокот што се враќа назад од Object
во типот на класата која се клонира, затоа што
секоја класа наследува од класата Object
Ова е пример на коваријантен повратен тип
НАПРЕДНО ПРОГРАМИРАЊЕ 64
НП - вовед
ФАКУЛТЕТ ЗА ИНФОРМАТИЧКИ НАУКИ
И КОМПЈУТЕРСКО ИНЖЕНЕРСТВО
clone метод
Ако класата има copy конструктор, clone методот
може да го искористи copy конструкторот за да
креира копија и истата да ја врати
public Sale clone()
{
return new Sale(this);
}
уште еден пример:
НАПРЕДНО ПРОГРАМИРАЊЕ 65
НП - вовед
ФАКУЛТЕТ ЗА ИНФОРМАТИЧКИ НАУКИ
И КОМПЈУТЕРСКО ИНЖЕНЕРСТВО
НАПРЕДНО ПРОГРАМИРАЊЕ 66
НП - вовед
ФАКУЛТЕТ ЗА ИНФОРМАТИЧКИ НАУКИ
И КОМПЈУТЕРСКО ИНЖЕНЕРСТВО
НАПРЕДНО ПРОГРАМИРАЊЕ 67
НП - вовед
ФАКУЛТЕТ ЗА ИНФОРМАТИЧКИ НАУКИ
И КОМПЈУТЕРСКО ИНЖЕНЕРСТВО
НАПРЕДНО ПРОГРАМИРАЊЕ 68
НП - вовед
ФАКУЛТЕТ ЗА ИНФОРМАТИЧКИ НАУКИ
И КОМПЈУТЕРСКО ИНЖЕНЕРСТВО
Abstract методи
Апстрактен метод е како празен метод кој
треба целосно да биде дефиниран во
наследените класи
Апстрактниот метод има заглавие во кое се
додава модификаторот abstract
Не можат да бидат приватни
Овие методи немаат тело и завршуваат со ;
public abstract double getPay();
public abstract void doIt(int count);
НАПРЕДНО ПРОГРАМИРАЊЕ 69
НП - вовед
ФАКУЛТЕТ ЗА ИНФОРМАТИЧКИ НАУКИ
И КОМПЈУТЕРСКО ИНЖЕНЕРСТВО
Abstract класи
Класата која има барем еден апстрактен
метод се нарекува апстрактна класа
Апстрактната класа во својата дефиниција го
вклучува модификаторот abstract:
public abstract class Employee
{
private instanceVariables;
. . .
public abstract double getPay();
. . .
}
НАПРЕДНО ПРОГРАМИРАЊЕ 70
НП - вовед
ФАКУЛТЕТ ЗА ИНФОРМАТИЧКИ НАУКИ
И КОМПЈУТЕРСКО ИНЖЕНЕРСТВО
Abstract класи
Апстрактните класи можат да имаат
апстрактни или целосно дефинирани
методи
Ако класа која наследува од апстрактна
класа не ги имплементира сите апстрактни
методи тогаш таа автоматски станува
апстрактна и мора да се додаде
модификаторот abstract во нејзината
дефиниција
Класата која нема апстрактни методи се
нарекува конкретна класа
НАПРЕДНО ПРОГРАМИРАЊЕ 71
НП - вовед
ФАКУЛТЕТ ЗА ИНФОРМАТИЧКИ НАУКИ
И КОМПЈУТЕРСКО ИНЖЕНЕРСТВО
Неможат да се инстанцираат
објекти од апстрактна класа
Апстрактната класа се користи за
изведување на специјализирани класи
Конструкторот на апстрактната класа неможе
да се користи за креирање на објект од
апстрактната класа
Како и да е, конструкторот од наследената класа
го повикува конструкторот на апстрактната класа
со помош на super
НАПРЕДНО ПРОГРАМИРАЊЕ 72
НП - вовед
ФАКУЛТЕТ ЗА ИНФОРМАТИЧКИ НАУКИ
И КОМПЈУТЕРСКО ИНЖЕНЕРСТВО
НАПРЕДНО ПРОГРАМИРАЊЕ 73
НП - вовед
ФАКУЛТЕТ ЗА ИНФОРМАТИЧКИ НАУКИ
И КОМПЈУТЕРСКО ИНЖЕНЕРСТВО
Интерфејси
Интерфејсот е нешто како екстремна апстрактна
класа
Интерфејсот не е класа
Тоа е тип претставник на секоја класа која го
имплементира интерфејсот
Синтаксата за дефинирање на интерфејс е слична на
синтаксата за дефинирање на класа
interface се користи наместо class
Интерфејсот специфицира множество на методи кои
секоја класа која го имплементира мора да ги
поседува (задоволува)
Тој содржи само заглавија на методи и дефиниција на
константи (променето во Java 8)
Тој не содржи променливи на инстанца ниту комплетни
дефиниции на методи (променето во Java 8)
НАПРЕДНО ПРОГРАМИРАЊЕ 74
НП - вовед
ФАКУЛТЕТ ЗА ИНФОРМАТИЧКИ НАУКИ
И КОМПЈУТЕРСКО ИНЖЕНЕРСТВО
Интерфејси
Интерфејсот и сите негови методи треба да бидат
декларирани како public
Неможе да се даде private, protected или package пристап
Кога класата имплементира интерфејс, сите методи
на интерфејсот мораат да бидат public
Поради тоа што интерфејсот е тип, параметрите на
методите можат да бидат од тип интерфејс
Параметарот ќе го прифати било кој аргумент од класа која
го имплементира интерфејсот
НАПРЕДНО ПРОГРАМИРАЊЕ 75
НП - вовед
ФАКУЛТЕТ ЗА ИНФОРМАТИЧКИ НАУКИ
И КОМПЈУТЕРСКО ИНЖЕНЕРСТВО
Ordered интерфејс
НАПРЕДНО ПРОГРАМИРАЊЕ 76
НП - вовед
ФАКУЛТЕТ ЗА ИНФОРМАТИЧКИ НАУКИ
И КОМПЈУТЕРСКО ИНЖЕНЕРСТВО
Имплементација на Ordered
интерфејсот
НАПРЕДНО ПРОГРАМИРАЊЕ 77
НП - вовед
ФАКУЛТЕТ ЗА ИНФОРМАТИЧКИ НАУКИ
И КОМПЈУТЕРСКО ИНЖЕНЕРСТВО
Имплементација на Ordered
интерфејсот
НАПРЕДНО ПРОГРАМИРАЊЕ 78
НП - вовед
ФАКУЛТЕТ ЗА ИНФОРМАТИЧКИ НАУКИ
И КОМПЈУТЕРСКО ИНЖЕНЕРСТВО
НАПРЕДНО ПРОГРАМИРАЊЕ 79
НП - вовед
ФАКУЛТЕТ ЗА ИНФОРМАТИЧКИ НАУКИ
И КОМПЈУТЕРСКО ИНЖЕНЕРСТВО
НАПРЕДНО ПРОГРАМИРАЊЕ 80
НП - вовед
ФАКУЛТЕТ ЗА ИНФОРМАТИЧКИ НАУКИ
И КОМПЈУТЕРСКО ИНЖЕНЕРСТВО
Наследување на интерфејси
НАПРЕДНО ПРОГРАМИРАЊЕ 81
НП - вовед
ФАКУЛТЕТ ЗА ИНФОРМАТИЧКИ НАУКИ
И КОМПЈУТЕРСКО ИНЖЕНЕРСТВО
Неконзистентни интерфејси
Кога класа имплементира два интерфејси:
Неконзистентност може да се појави ако двата
интерфејси имаат константи со исто име, но
различна вредност
Друга неконзистентност може да се појави ако
интерфејсите содржат методи со исто име но
различен повратен тип
Ако класата имплементира два
неконзистентни интерфејси, дефиницијата на
класата е нелегална
НАПРЕДНО ПРОГРАМИРАЊЕ 82
НП - вовед
ФАКУЛТЕТ ЗА ИНФОРМАТИЧКИ НАУКИ
И КОМПЈУТЕРСКО ИНЖЕНЕРСТВО
Comparable интерфејсот
Comparable интерфејсот е поставен во
java.lang пакетот и автоматски е достапен
на секоја програма
Има само еден метод кој треба да се
имплементира:
public int compareTo(Object other);
НАПРЕДНО ПРОГРАМИРАЊЕ 83
НП - вовед
ФАКУЛТЕТ ЗА ИНФОРМАТИЧКИ НАУКИ
И КОМПЈУТЕРСКО ИНЖЕНЕРСТВО
Comparable интерфејсот
Методот compareTo мора да врати
Негативен број, ако повикувачкиот објект е „пред“
објектот параметар
Нула, ако повикувачкиот објект е „еднаков на“
објектот параметар
Позитивен број, ако повикувачкиот објект е „после“
објектот параметар
Ако параметарот other не е од ист тип како и
класата во која е дефиниран, тогаш
ClassCastException треба да биде
„фрлен“
НАПРЕДНО ПРОГРАМИРАЊЕ 84
НП - вовед
ФАКУЛТЕТ ЗА ИНФОРМАТИЧКИ НАУКИ
И КОМПЈУТЕРСКО ИНЖЕНЕРСТВО
Serializable интерфејсот
Екстремен, но често употребуван
пример за интерфејс е Serializable
интерфејсот
Нема методи и дефинирани константи: тој
е комплетно празен
Се користи за да се означи дека класата
која го имплементира поддржува
серијализација
НАПРЕДНО ПРОГРАМИРАЊЕ 85
НП - вовед
ФАКУЛТЕТ ЗА ИНФОРМАТИЧКИ НАУКИ
И КОМПЈУТЕРСКО ИНЖЕНЕРСТВО
Cloneable интерфејсот
Cloneable е уште еден невообичаен
интерфејс во Java
Не содржи методи, ниту константи
Се користи за да се означи како методот
clone (наследен од Object класата)
треба да биде користен и редефиниран
НАПРЕДНО ПРОГРАМИРАЊЕ 86
НП - вовед
ФАКУЛТЕТ ЗА ИНФОРМАТИЧКИ НАУКИ
И КОМПЈУТЕРСКО ИНЖЕНЕРСТВО
Cloneable интерфејсот
Ако податоците на објектот кои се клонираат
вклучуваат променливи на инстанца од менлива
класа, тогаш едноставната имплементација на clone
ќе предизвика privacy leak
Кога се имплементира Cloneable интерфејсот:
Прво се повикува clone методот на основната класа
Промена на вредностите на променливите инстанци од
менлива класа (преку повикување на нивниот clone метод)
НАПРЕДНО ПРОГРАМИРАЊЕ 87
НП - вовед
ФАКУЛТЕТ ЗА ИНФОРМАТИЧКИ НАУКИ
И КОМПЈУТЕРСКО ИНЖЕНЕРСТВО
Cloneable интерфејсот
НАПРЕДНО ПРОГРАМИРАЊЕ 88
НП - вовед
ФАКУЛТЕТ ЗА ИНФОРМАТИЧКИ НАУКИ
И КОМПЈУТЕРСКО ИНЖЕНЕРСТВО
Интерфејси во Java 8
НАПРЕДНО ПРОГРАМИРАЊЕ 89
НП - вовед
ФАКУЛТЕТ ЗА ИНФОРМАТИЧКИ НАУКИ
И КОМПЈУТЕРСКО ИНЖЕНЕРСТВО
Интерфејси во Java 8
НАПРЕДНО ПРОГРАМИРАЊЕ 90
НП - вовед
ФАКУЛТЕТ ЗА ИНФОРМАТИЧКИ НАУКИ
И КОМПЈУТЕРСКО ИНЖЕНЕРСТВО
Интерфејси во Java 8
Кога се имплементира
интерфејс кој содржи
статички метод,
статистичкиот метод е
дел од интерфејсот, а не
од класите кои го
имплементираат
интефејсот.
Поради ова статичките
методи од интерфејсите
неможе да бидат
повикани од страна на
класите кои ги
имплементираат
соодветните интерфејси
Ова не важи за
наследените класи
НАПРЕДНО ПРОГРАМИРАЊЕ 91