You are on page 1of 91

ФАКУЛТЕТ ЗА ИНФОРМАТИЧКИ НАУКИ И КОМПЈУТЕРСКО ИНЖЕНЕРСТВО

Напредно
програмирање
Предавање 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
НП - вовед
ФАКУЛТЕТ ЗА ИНФОРМАТИЧКИ НАУКИ
И КОМПЈУТЕРСКО ИНЖЕНЕРСТВО

Константи и static методи во


wrapper класите
 Wrapper класите имаат static методи за конверзија на
коректно формиран string (кој репрезентира одреден
број) во број од соодветен податочен тип
 Методите Integer.parseInt, Long.parseLong,
Float.parseFloat и Double.parseDouble ја прават оваа
конверзија за примитивните податочни типови (во редослед)
int, long, float и double
 Wrapper класите исто така имаат static методи кои ја
конвертираат нумеричката вредност во соодветна
string репрезентација
 На пример наредбата
Double.toString(123.99);
враќа string со вредност "123.99“
 Character класата дополнително содржи static
методи корисни за процесирање на знаци

НАПРЕДНО ПРОГРАМИРАЊЕ 6
НП - вовед
ФАКУЛТЕТ ЗА ИНФОРМАТИЧКИ НАУКИ

Некои методи на Character


И КОМПЈУТЕРСКО ИНЖЕНЕРСТВО

класата (1 од 3)

НАПРЕДНО ПРОГРАМИРАЊЕ 7
НП - вовед
ФАКУЛТЕТ ЗА ИНФОРМАТИЧКИ НАУКИ

Некои методи на Character


И КОМПЈУТЕРСКО ИНЖЕНЕРСТВО

класата (2 од 3)

НАПРЕДНО ПРОГРАМИРАЊЕ 8
НП - вовед
ФАКУЛТЕТ ЗА ИНФОРМАТИЧКИ НАУКИ

Некои методи на Character


И КОМПЈУТЕРСКО ИНЖЕНЕРСТВО

класата (3 од 3)

НАПРЕДНО ПРОГРАМИРАЊЕ 9
НП - вовед
ФАКУЛТЕТ ЗА ИНФОРМАТИЧКИ НАУКИ
И КОМПЈУТЕРСКО ИНЖЕНЕРСТВО

Разлика меѓу класни и


примитивни типови на параметри
 Метод неможе да ја промени вредноста
на променливата од примитивен
податочен тип, ако таа е аргумент на тој
метод
 Спротивно на тоа, метод може да ја
промени вредноста на променлива на
инстанца од класен тип, ако таа е
аргумент на тој метод

НАПРЕДНО ПРОГРАМИРАЊЕ 10
НП - вовед
ФАКУЛТЕТ ЗА ИНФОРМАТИЧКИ НАУКИ
И КОМПЈУТЕРСКО ИНЖЕНЕРСТВО

Разлика меѓу класни и примитивни


типови на параметри (1 од 4)

НАПРЕДНО ПРОГРАМИРАЊЕ 11
НП - вовед
ФАКУЛТЕТ ЗА ИНФОРМАТИЧКИ НАУКИ
И КОМПЈУТЕРСКО ИНЖЕНЕРСТВО

Разлика меѓу класни и примитивни


типови на параметри (2 од 4)

НАПРЕДНО ПРОГРАМИРАЊЕ 12
НП - вовед
ФАКУЛТЕТ ЗА ИНФОРМАТИЧКИ НАУКИ
И КОМПЈУТЕРСКО ИНЖЕНЕРСТВО

Разлика меѓу класни и примитивни


типови на параметри (3 од 4)

НАПРЕДНО ПРОГРАМИРАЊЕ 13
НП - вовед
ФАКУЛТЕТ ЗА ИНФОРМАТИЧКИ НАУКИ
И КОМПЈУТЕРСКО ИНЖЕНЕРСТВО

Разлика меѓу класни и примитивни


типови на параметри (4 од 4)

НАПРЕДНО ПРОГРАМИРАЊЕ 14
НП - вовед
ФАКУЛТЕТ ЗА ИНФОРМАТИЧКИ НАУКИ
И КОМПЈУТЕРСКО ИНЖЕНЕРСТВО

Употреба на == кај String класата


 Операторот за споредба на еднаквост (==) може
правилно да спореди вредности на променливи од
примитивни типови
 Како и да е, споредбата на два објекти од било која
класа како што се објекти од класата String, ==
споредува дали тие два објекти имаат иста
мемориска адреса
 За да се споредат два објекти потребно е да се
користи методот equals
string1.equals(string2)
или за класата String
string1.equalsIgnoreCase(string2)

НАПРЕДНО ПРОГРАМИРАЊЕ 15
НП - вовед
ФАКУЛТЕТ ЗА ИНФОРМАТИЧКИ НАУКИ
И КОМПЈУТЕРСКО ИНЖЕНЕРСТВО

Лексикографско и алфабетско
споредување
 Лексикографското подредување е исто како и ASCII
подредувањето, вклучувајќи ги буквите, цифрите и останатите
карактери
 Сите големи и мали букви се алфабетски подредени, но сите
големи букви се пред малите
 Ако s1 и s2 се две променливи од тип String на кои им се дадени
вредности од String тип тогаш s1.compareTo(s2) враќа
негативен број ако s1 е лексикографски пред s2, враќа нула ако
двете вредности се еднакви и враќа позитивен број ако s2 е
лексикографски пред s1
 Алфабетското споредување е овозможено со методот
compareToIgnoreCase

НАПРЕДНО ПРОГРАМИРАЊЕ 16
НП - вовед
ФАКУЛТЕТ ЗА ИНФОРМАТИЧКИ НАУКИ
И КОМПЈУТЕРСКО ИНЖЕНЕРСТВО

Менливи и неменливи класи


 Класата кој не содржи методи (други освен
конструкторот) кои можат да ги променат
податочните членови на класата се нарекува
неменлива класа (immutable class)
 Објектите инстанцирани од ваква класа се
нарекуваат неменливи објекти (immutable objects)
 Сосема е безбедно да се врати референца од
неменлив објект бидејќи не постои начин истиот
да биде променет
 String класата е неменлива класа

НАПРЕДНО ПРОГРАМИРАЊЕ 17
НП - вовед
ФАКУЛТЕТ ЗА ИНФОРМАТИЧКИ НАУКИ
И КОМПЈУТЕРСКО ИНЖЕНЕРСТВО

Менливи и неменливи класи


 Класата кој содржи јавни методи кои можат
да ги променат податочните членови на
класата се нарекува менлива класа (mutable
class) а нејзините објекти менливи објекти
 Не пишувајте метод кој враќа менлив објект
 Наместо тоа, користете copy конструктор за
враќање на референца на комплетно независна
копија од менливиот објект

НАПРЕДНО ПРОГРАМИРАЊЕ 18
НП - вовед
ФАКУЛТЕТ ЗА ИНФОРМАТИЧКИ НАУКИ
И КОМПЈУТЕРСКО ИНЖЕНЕРСТВО

Deep Copy наспроти Shallow Copy


 deep copy на објект е копија која нема ниту
една заедничка референца со оригиналот (со
еден исклучок)
 Исклучокот: Дозволени се заеднички референци
само на неменливи објекти
 Секоја копија која не е deep copy се нарекува
shallow copy
 Овој тип на копија може да допринесе до сериозни
нарушувања на приватноста на податоците
(privacy leaks)

НАПРЕДНО ПРОГРАМИРАЊЕ 19
НП - вовед
ФАКУЛТЕТ ЗА ИНФОРМАТИЧКИ НАУКИ
И КОМПЈУТЕРСКО ИНЖЕНЕРСТВО

Полиња и референци
 Како и класните типови, променлива од
тип поле е референца
 Полињата се објекти
 Променливата од тип поле ја содржи
адресата на чија локација е сместен поле
објектот во меморијата
 Поле типот (вообичаено) се смета за
класен тип

НАПРЕДНО ПРОГРАМИРАЊЕ 20
НП - вовед
ФАКУЛТЕТ ЗА ИНФОРМАТИЧКИ НАУКИ
И КОМПЈУТЕРСКО ИНЖЕНЕРСТВО

Полињата се објекти
 Полињата можат да бидат разгледувани како
колекција од индексирани променливи
 Полињата можат да бидат разгледувани и како
единствени целини чии вредности се колекции од
вредности од основниот тип
double[] a;
a = new double[10];
 Треба да се забележи дека new операторот кој го
креира полето всушност повикува конструктор
користејќи нестандардна синтакса
 Во претходниот пример a содржи една единствена
вредност: мемориската адреса на полето односно
неговата референца

НАПРЕДНО ПРОГРАМИРАЊЕ 21
НП - вовед
ФАКУЛТЕТ ЗА ИНФОРМАТИЧКИ НАУКИ
И КОМПЈУТЕРСКО ИНЖЕНЕРСТВО

Вовед во наследување
 Наследувањето е една од основните техники на
објектно ориентираното програмирање
 Изведената класа автоматски ги наследува сите
променливи на инстанца и методи дефинирани во
основната класа, а може дополнително да дефинира
и нови променливи на инстанца и методи
 Наследувањето е особено значајно затоа што
дозволува искористување на претходно напишаниот
код, без да има потреба за негово копирање во
изведените класи

НАПРЕДНО ПРОГРАМИРАЊЕ 22
НП - вовед
ФАКУЛТЕТ ЗА ИНФОРМАТИЧКИ НАУКИ
И КОМПЈУТЕРСКО ИНЖЕНЕРСТВО

Препокривање на методи
 Дефинициите на наследените променливи и
методи не се појавуваат во изведените класи
 Кодот се користи без негова експлицитна копија во
изведената класа, со исклучок на методите кои се
редефинираат.
 Иако изведената класа ги наследува
методите од основната класа, сепак таа може
да ги промени или препокрие истите ако е
потребно
 За да се препокрие дефиниција на веќе постоечки
метод, потребно е неговата нова дефиниција
едноставно да се постави во дефиницијата на
класата, слично како и за сите останати методи
НАПРЕДНО ПРОГРАМИРАЊЕ 23
НП - вовед
ФАКУЛТЕТ ЗА ИНФОРМАТИЧКИ НАУКИ
И КОМПЈУТЕРСКО ИНЖЕНЕРСТВО

Менување на типот на податокот кој


се враќа кај препокриените методи
 Вообичаено, типот на податокот кој се враќа
не смее да биде променет при препокривање
на методот
 Како и да е, ако податокот е од класен тип,
тогаш типот на податокот што се враќа може
да биде променет во било која изведена
класа од класата на повратниот тип
 Ова е познато како коваријантен повратен
тип
 Коваријантните повратни типови не се
дозволени пред Java 5.0
НАПРЕДНО ПРОГРАМИРАЊЕ 24
НП - вовед
ФАКУЛТЕТ ЗА ИНФОРМАТИЧКИ НАУКИ
И КОМПЈУТЕРСКО ИНЖЕНЕРСТВО

Коваријантен повратен тип


 Нека е дадена следната основна класа:
public class BaseClass
{ . . .
public Employee getSomeone(int someKey)
. . .

 Следново е дозволено во Java 5.0:


public class DerivedClass extends BaseClass
{ . . .
public HourlyEmployee getSomeone(int someKey)
. . .

НАПРЕДНО ПРОГРАМИРАЊЕ 25
НП - вовед
ФАКУЛТЕТ ЗА ИНФОРМАТИЧКИ НАУКИ
И КОМПЈУТЕРСКО ИНЖЕНЕРСТВО

Дозвола на пристап кај


препокриените методи
 Дозволата за пристап на препокриените
методи секогаш може да биде променета од
private во основната класа во public (или во
било која дозвола со поголем пристап) во
изведената класа
 Дозволата за пристап на препокриен метод
неможе да биде променета од public во
основната класа во било која порестриктивна
дозвола за пристап во изведената класа

НАПРЕДНО ПРОГРАМИРАЊЕ 26
НП - вовед
ФАКУЛТЕТ ЗА ИНФОРМАТИЧКИ НАУКИ
И КОМПЈУТЕРСКО ИНЖЕНЕРСТВО

Дозвола на пристап кај


препокриените методи
 За следното заглавие на метод во основната класа:
private void doSomething()
 Во изведената класа дозволено е заглавието да биде
променето во:
public void doSomething()
 Спротивното не е дозволено
public void doSomething()
private void doSomething()// it’s illegal

НАПРЕДНО ПРОГРАМИРАЊЕ 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
НП - вовед
ФАКУЛТЕТ ЗА ИНФОРМАТИЧКИ НАУКИ
И КОМПЈУТЕРСКО ИНЖЕНЕРСТВО

Protected и Package пристап


 Ако метод или променлива на инстанца се означени
како protected (наместо public или private) во
рамки на една класа, тогаш преку нивното име тие
може да бидат пристапени
 Во дефиницијата на класата
 Во рамки на било која класа изведена од класата во која тие
се дефинирани
 Во дефиницијата на било која класа од истиот пакет
 protected модификаторот обезбедува многу
послаба заштита споредено со private
модификаторот
 Обезбедува директен пристап на програмерот кој ќе
дефинира соодветна изведена класа

НАПРЕДНО ПРОГРАМИРАЊЕ 38
НП - вовед
ФАКУЛТЕТ ЗА ИНФОРМАТИЧКИ НАУКИ
И КОМПЈУТЕРСКО ИНЖЕНЕРСТВО

Protected и Package пристап


 Променлива на инстанца или метод за кои не
е експлицитно дефинирана дозволата за
пристап, имаат package дозвола на пристап
 Package дозволата е позната како предефинирана
(default) или пријателска (friendly) дозвола
 Променливите на инстанца или методи со
package дозвола на пристап можат да бидат
пристапени од било која класа дефинирана
во рамки на истиот пакет
 Тие неможат да бидат пристапени надвор од
пакетот

НАПРЕДНО ПРОГРАМИРАЊЕ 39
НП - вовед
ФАКУЛТЕТ ЗА ИНФОРМАТИЧКИ НАУКИ
И КОМПЈУТЕРСКО ИНЖЕНЕРСТВО

Protected и Package пристап


 Треба да се забележи дека package
дозволата за пристап е порестриктивна
од protected
 Package дозволата дава поголема
контрола на програмерот при
дефинирањето на класите
 Кој го контролира package директориумот
ја контролира package дозволата за
пристап

НАПРЕДНО ПРОГРАМИРАЊЕ 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
НП - вовед
ФАКУЛТЕТ ЗА ИНФОРМАТИЧКИ НАУКИ
И КОМПЈУТЕРСКО ИНЖЕНЕРСТВО

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


 Метод од основната класа може да биде повикан во
рамки на дефиницијата на методот кој го препокрива
во изведената класа
 Препокриениот метод се повикува по помош на клучниот
збор super
public String toString()
{
return (super.toString() + "$" + wageRate);
}
 При користење на објект од изведената класа надвор
од дефиницијата на класата не постои начин за
повикување на препокриениот метод од основната
класа

НАПРЕДНО ПРОГРАМИРАЊЕ 44
НП - вовед
ФАКУЛТЕТ ЗА ИНФОРМАТИЧКИ НАУКИ
И КОМПЈУТЕРСКО ИНЖЕНЕРСТВО

Класата Object
 Класата Object се наоѓа во пакетот
java.lang кој автоматски се импортира
 Ова овозможува методите да бидат
пишувани со параметри од тип Object
 Параметаротод тип Object може да биде
заменет со објект од било која класа
 Класата Object има некои методи кои секоја Java
класа ги наследува
 Како пример, методите equals и toString
 Секој објект ги наследува овие методи од некоја
предок класа
 Овие наследени методи треба да бидат препокриени
со дефиниции кои многу повеќе соодветствуваат на
класата

НАПРЕДНО ПРОГРАМИРАЊЕ 45
НП - вовед
ФАКУЛТЕТ ЗА ИНФОРМАТИЧКИ НАУКИ
И КОМПЈУТЕРСКО ИНЖЕНЕРСТВО

public boolean equals(Object otherObject)


{
if(otherObject == null)
return false;
else if(getClass( ) != otherObject.getClass( ))
return false;
else
{
Employee otherEmployee = (Employee)otherObject;
return (name.equals(otherEmployee.name) &&
hireDate.equals(otherEmployee.hireDate));
}
}

НАПРЕДНО ПРОГРАМИРАЊЕ 46
НП - вовед
ФАКУЛТЕТ ЗА ИНФОРМАТИЧКИ НАУКИ
И КОМПЈУТЕРСКО ИНЖЕНЕРСТВО

getClass наспроти instanceof


 Многу автори препорачуваат употреба на
instanceof операторот во дефиницијата на equals
наместо користење на getClass() методот
 instanceof операторот враќа true ако објектот кој
се тестира е инстанца од класата за која тој се
тестира
 Но, исто така тој враќа true и ако објектот е инстанца од
класа која е изведена од класата за која тој се тестира

НАПРЕДНО ПРОГРАМИРАЊЕ 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
НП - вовед
ФАКУЛТЕТ ЗА ИНФОРМАТИЧКИ НАУКИ
И КОМПЈУТЕРСКО ИНЖЕНЕРСТВО

Sale и DiscountSale класите


 bill() методот на Sale класата:
public double bill( )
{
return price;
}
 bill() методот на DiscountSale класата:
public double bill( )
{
double fraction = discount/100;
return (1 - fraction) * getPrice( );
}

НАПРЕДНО ПРОГРАМИРАЊЕ 53
НП - вовед
ФАКУЛТЕТ ЗА ИНФОРМАТИЧКИ НАУКИ
И КОМПЈУТЕРСКО ИНЖЕНЕРСТВО

Sale и DiscountSale класите


 За следнава програма:
. . .
Sale simple = new sale("floor mat", 10.00);
DiscountSale discount = new
DiscountSale("floor mat", 11.00, 10);
. . .
if (discount.lessThan(simple))
System.out.println("$" + discount.bill() +
" < " + "$" + simple.bill() +
" because late-binding works!");
. . .
 Излезот ќе биде:

$9.90 < $10 because late-binding works!

НАПРЕДНО ПРОГРАМИРАЊЕ 54
НП - вовед
ФАКУЛТЕТ ЗА ИНФОРМАТИЧКИ НАУКИ
И КОМПЈУТЕРСКО ИНЖЕНЕРСТВО

Не постои late binding за static


методите
 Кога одлуката за која дефиниција на метод ќе
се користи при повик од страна на некој
објект се носи во моментот на компајлирање,
тоа се нарекува static binding или early binding
 Одлуката се носи врз основа на типот на
променливата која референцира кон објектот
 Java користи static, не late binding со
приватните, final и static методите
 Во случајот на приватни и final методи, late
binding нема никакво значење
 Во случај на повик на static метод постои голема
разлика

НАПРЕДНО ПРОГРАМИРАЊЕ 55
НП - вовед
ФАКУЛТЕТ ЗА ИНФОРМАТИЧКИ НАУКИ
И КОМПЈУТЕРСКО ИНЖЕНЕРСТВО

Не постои late binding за static


методите
 announcement() методот на Sale класата:
public static void announcement( )
{
System.out.println("Sale class");
}
 announcement() методот на DiscountSale
класата:
public static void announcement( )
{
System.out.println("DiscountSale class");
}

НАПРЕДНО ПРОГРАМИРАЊЕ 56
НП - вовед
ФАКУЛТЕТ ЗА ИНФОРМАТИЧКИ НАУКИ
И КОМПЈУТЕРСКО ИНЖЕНЕРСТВО

Не постои late binding за static


методите
 За претходниот пример, креирани се два
објекти: simple (од Sale класата) и
discount (од DiscountSale класата)
 Нека е направено следното доделување:
simple = discount;
 Двете променливи покажуваат на ист објект
 Поточно, променливата од Sale класата покажува
на објект инстанциран од DiscountSale класата

НАПРЕДНО ПРОГРАМИРАЊЕ 57
НП - вовед
ФАКУЛТЕТ ЗА ИНФОРМАТИЧКИ НАУКИ
И КОМПЈУТЕРСКО ИНЖЕНЕРСТВО

Не постои late binding за static


методите
 При повикот:
simple.announcement();
 Излезот е:
Sale class
 Треба да се забележи дека announcement е
static метод повикан од објект (наместо преку
името на класата)
 Поради тоа типот на simple е одреден преку
името на неговата променлива, а не според
објектот кон кој истата променлива референцира

НАПРЕДНО ПРОГРАМИРАЊЕ 58
НП - вовед
ФАКУЛТЕТ ЗА ИНФОРМАТИЧКИ НАУКИ
И КОМПЈУТЕРСКО ИНЖЕНЕРСТВО

Не постои late binding за static


методите
 Постојат други начини како static методите да
бидат повикани на посуптилен начин
 Како пример, static метод може да биде
повикан преку друг nonstatic метод, без
експлицитно име на класата или повикувачки
објект
 Во овој случај, повикувачкиот објект е
имплицитно this

НАПРЕДНО ПРОГРАМИРАЊЕ 59
НП - вовед
ФАКУЛТЕТ ЗА ИНФОРМАТИЧКИ НАУКИ
И КОМПЈУТЕРСКО ИНЖЕНЕРСТВО

final модификатор
 Методот означен како final неможе да се
препокрие со нова дефиниција во изведените
класи
 Ако методот е означен како final, компајлерот
користи early binding
public final void someMethod() { . . . }

 Класата означена како final неможе да се


користи како основна класа од која други
класи би можеле да наследат

НАПРЕДНО ПРОГРАМИРАЊЕ 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());

 Поради late binding, toString ја користи


дефиницијата дадена во DiscountSale класата

НАПРЕДНО ПРОГРАМИРАЊЕ 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);
}
уште еден пример:

public DiscountSale clone()


{
return new DiscountSale(this);
}

НАПРЕДНО ПРОГРАМИРАЊЕ 65
НП - вовед
ФАКУЛТЕТ ЗА ИНФОРМАТИЧКИ НАУКИ
И КОМПЈУТЕРСКО ИНЖЕНЕРСТВО

Ограничувања на copy конструкторот


 Иако copy конструкторот и clone методот за
една класа ја вршат истата работа, сепак во
одредени ситуации само clone методот
функционира

НАПРЕДНО ПРОГРАМИРАЊЕ 66
НП - вовед
ФАКУЛТЕТ ЗА ИНФОРМАТИЧКИ НАУКИ
И КОМПЈУТЕРСКО ИНЖЕНЕРСТВО

НАПРЕДНО ПРОГРАМИРАЊЕ 67
НП - вовед
ФАКУЛТЕТ ЗА ИНФОРМАТИЧКИ НАУКИ
И КОМПЈУТЕРСКО ИНЖЕНЕРСТВО

Ограничувања на copy конструкторот

НАПРЕДНО ПРОГРАМИРАЊЕ 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

You might also like