Чекор по чекор
Почетни чекори со Java
Објектно оријентирани концепти во Јава - Прв дел
Објектно оријентирани концепти во Јава - Втор дел
Објектно оријентирани концепти во Јава - Трет дел
Јава сервлети - Прв дел
Единствен Јава објект (singleton)
Најчести 10 грешки што ги прават Java програмерите
повеќе...
Што е тоа ...
... IDE
... Tomcat
... објект?
... класа?
... наследување?
... интерфејс?
... наследување? (прашања и одговори)
повеќе...
За загревање
Нов проект во Eclipse?
Примитивни податочни типови
Променливи
Оператори
Доделувачки, аритметички и Unary оператори
Оператори за еднаквост, релации и услови
Изрази, искази и блокови
повеќе...
Како да ...
... конвертирам java.sql.Timestamp во java.util.Date
... зададам формат на датум
... ковертирам „long“ во HEX и обратно
... прочитам датотека и променам стринг
... креирам ZIP датотека
... поврзам Apache и Tomcat користејќи mod_jk
... пратам недефиниран број на атрибути до некоја метода
повеќе...
Java преку примери
new Socket(String addr,int port)
new URL(String address)
new URL(String protocol, String host, int port, String file)
CommPort: getInputStream()
CommPortIdentifier: getPortIdentifiers()
Statement: executeQuery(String sql)
Statement: getMaxRows()
повеќе...
Грешка
Нов напис
Рубрика:
Наслов:
  
  

страна број:123
Објектно оријентирани концепти во Јава - Трет дел
Напредно наследување: Override на методи. (override = надгласување, натфрлување)

Наследувањето го опишав во првиот дел од оваа серија на написи, но поради желбата да скратам нешто во тој сегмент испуштив една битна можност која ќе ја покријам сега, а тоа е override на методи. Како што веќе знаеш објект од класата „Jabolknica“ ги наследува сите можности на класата „Drvo“, според која и е базирана. Поради тоа „Jabolknica“ го има истиот метод „rastenje“ исто како и класата „Drvo“.

Но што доколку сакаш со самото растење на Jabolknicite да израснуваат и нови јаболка, нов плод? Секако дека можеш да ја повикаш методата „dodadiJabolko“ секојпат кога ќе ја повикаш и методата за растење на Jabolknica-та, но секако е многу поелегантно доколку Drva-та и Jabolknicite можеш да ги третираш на ист начин (на пример при повик на методата за растење), а секое од нив да го направи она што треба да го направи објект од негов тип.

За да може истата метода да прави нешто друго во подкласата мораш да направиш „override“ на таа метода со нова дефиниција во подкласата. Едноставно кажано треба да ја ре-декларираш „rastenje“ методата во класата „Jabolknica“ за да може истата да прави нешто друго. Еве еден пример за нова дефиниција на методата „rastenjе“ која можеш да ја искористиш во твојата класа „Jabolknica“:

public void rastenje(){
    visina = visina + 1;
    dodadiJabolko();
}

Едноставно нели? Но што ако се додаде нова функционалност во методата „rastenje“ во основната класа „Drvo“? Како да се осигураме дека таа функционалност ќе биде наследена и од класата „Jabolknica“? Слично како и кај overload-увањето на методи, каде што имплементираме едноставна метода со специјален повик до некоја посложена метода, и овде можеме да дефинираме метода во подкласата и да направиме повик до истата метода од основната класа:

public void rastenje(){
    super.rastenje();
    dodadiJabolko();
}

Линијата „super.rastenje();“ го прави повикот до методата во основната класа, а со самото тоа не поштедува од измислување на тркалото по вторпат. Ова посебно се наоѓа при рака кога наследуваш некоја класа и ја прошируваш нејзината функционалност а го немаш изворниот код од таа класа. Со едноставен повик до методата која се наоѓа во основата класа (или суперкласа), а ти ја override-уваш во твојата нова класа, можеш да се осигураш дека твојот објект не губи на основна функционалност.

Исто така и конструкторите можат да бидат override-увани како нормално методи. Еве неколку примери:

private int vkupnoJabolka;

public Jabolknica(){
    super();
    vkupnoJabolka = 0;
}

public Jabolknica(int visina){
    super(visina);
    vkupnoJabolka = 0;
}

public Jabolknica(int visina, int vkupnoJabolka){
    super(visina);
    if (vkupnoJabolka < 0) this.vkupnoJabolka = 0;
    else this.vkupnoJabolka = vkupnoJabolka;
}

Првите два контрсуктори го override-уваат еквивалентиот конструктор во класата „Drvo“ додека третитот е сосема нов конструктор. Приметуваш дека конструкторот од основата класа го повикуваме со „super()“. Сите три конструктори го повикуваат конструкторот од основната класа за да се дојде до осигурување дека нема да има губење на функционалност.
страна број: 1 2 3 4 5 << претходна страна : : следна страна >> 
 
Коментирај
автор: Анонимус
Анонимните коментари ќе бидат објавувани веднаш после нивната проверка.
За да вашиот коментар биде веднаш валиден претходно пријавете се или креирајте свој профил


напишал: Анонимус (08.01.2008 14:42:37)
А што се деструктори? Каде да прочитам за нив? Ми бара учителката у школо...
напишал: slavejovanovski (11.01.2008 08:31:26)
Официјално не постојат деструктори во Java. Тоа може да звучи чудно доколку доаѓате од C/C++ светот, но во Java виртуелната машина се грижи за контрола на меморијата.

Не постои нешто како на пример:

public void ~className();

Но, Java (C# .NET) има друг вид на метод кои навидум наликува на деструктор. Овој метод во Java е:

protected void finalize();

и е член на базичната Object класа.

Овој метод се повикува од страна на виртуелната машина во моментот кога Garbage Collector-от ја зема назад меморијата зафатена од некој објект. Најчесто овој метод се користи за да се затворат конекции до датабази, датотеки и слично.

Се надевам дека ова ќе е доволно за твојата учителка. :)
напишал: MZ (24.02.2008 18:20:55)
Мислам дека за искусните програмери се подразбира, но во случајов се работи за почетник, па да помогнам и јас малце и да напоменам дека споменатиот метод треба да се override-ува во нашата класа, пример:

protected void finalize()
{
myConnection.Close();
super.finalize();
}
напишал: Анонимус (06.04.2008 18:04:19)
Не го бива. Да беше добро немаше на конекциите да додаваат close() метод. Можеби идејата на јава е да не се грижат програмерите за меморијата, но до сега не направиле толку добра виртуелна машина. Затоа најбезбеден начин е да си направиш свој close() метод и да си го повикуваш секој пат кога кје престанеш да го користиш објектот.
напишал: igor (09.04.2008 02:06:44)
Како бре не го бива?

Хм, не сум сигурен ни дали те сваќам, какви конекции? Кон база на податоци? За што станува збор?

Или идејата ти е конекцијата сама да си се „откачи“, односно затвори откако ќе престанеш да ја користиш?
пребарување
најди
 
Форум
 
JugMK
GetJava Download Button
http://www.eclipse.org
 
 
 
 
Copyrights © 2006 - 2017 by Java.com.mk
Права и правила за користење на java.com.mk
Контакт адреса:
contact AT java.com.mk
Powered by Supernova v.0.70 beta
JavaTM и Java-базираните ознаки се трговски марки или регистрирани трговски марки на Sun Microsystems, Inc. во САД и други држави. Java.com.mk никако не соработува со Sun Microsystems, Inc.
Сите други трговски марки се сопственост на нивните сопственици.