public class Animal{
public void eat(){
System.out.print("Animal");
}
}
public class Horse extends Animal{
public void eat(){
System.out.print("Horse");
}
public void buck(){
System.out.print("Horse buck");
}
}
public class Test {
public static void main(String [] args){
Animal a=new Animal();
Animal b=new Horse();
a.eat(); // burada eat() metodu Animal class-dakin cagirir.
b.eat(); // burada ise eat() metodu Horse class-dakin cagirir.Cunki metod artiq override olunub.
Animal c=new Horse();
c.burk(); yazsaq burada xeta verecek.Cunki Animal class-da buck() adli 1 metod yoxdur.Polymorphism dediyimiz kimi ancaq eyni adli metodlara aid edilir.yeni 1 metod hem super class-da hemde sub class-da olmalidir.eger ferqli 1 metod olarsa bunu polymorhism-e aid etmek olmaz.
Note:
- private
- default
- protected
- public
Override olan 1 metodun override olmus 1 metoddan daha cox mehdudlasdirici modifier-i ola bilmez.
Override zamani asagidaki sertler odenilmelidir:
- Argument list override olmus metodla uygun olmalidir.Eger onlar uygun olmasa , bu overloading olar.
- Return tip eyni olmalidir.
- Override olunan metodda Access level cox mehdudlasdirici ola bilmez override etmis metoddan ferqli olaraq.
- 1 az mehdudlasdirici ola biler.
- Override olunan 1 metod unchecked(runtime exception)ata biler.
- Override olunan 1 metod checked exception atmamalidir.
- Final olan 1 metod override oluna bilmez.
- Static olan 1 metod override oluna bilmez.
- Eger 1 metod inherit olunmursa o zaman onu override ede bilmerik.
private void eat(){}
}
public class Horse extends Animal{ }
public class test{
public static void main( String [] args){
Horse h=new Horse();
h.eat(); // legal deyil.Cunki Horse eat() metodunu override etmeyib.private olan 1 metod ancaq oz class-nin icindekilere gorunurdu.
Eger hem super class-daki hemdeki sub class-daki metodu 1-likde isletmek istesek o zaman
public class Test{
public void eat(){
super.eat();
}
}
bu zaman 1 ci super class-daki sonra ise sub class-daki metod calisacaqdir.Eger metod private olsa bu zaman super yazanda hemin metod xeta verecek.Bununda sebebi private olan 1 metod veya deyisenin yalniz oz class-i icindekilere gorunmesidi.
public class Animal{
public void eat() throws Exception{ }
}
public class Horse{
public void eat() { }
}
Burada run class-da Animaldaki eat() metodu error verecek.
public class Animal{
public void eat() { }
}
public class Horse{
public void eat()throws Exception { } // burda ise hemin anda xeta verecek.run class-da deyil.Umumiyyetle bu hissede check Exception yazmaq duzgun deyil cunki hemin anda xeta verecek.
}
Note: Override zamani metod check atsa run time vaxti xeta verecek.hem ozunde olan metod hemdeki sub-inda olan metod.Metodlar ancaq uncheck exception atmalidirlar.Eger super class 1 uncheck exception atirsa sub class ya hecne atmamali,ya hemin exceptionu atmali yadaki o exceptionun sub classni atmalidir.Ancaq Exceptionun super class-i kimi Exception goturulse bu hemin anda xeta verecek.Cunki icinde hem uncheck hemde check exception olur.
Indi ise overloadingden danismaq isterdim.
Overloaded metodlar class-da eyni adli metodlari yeniden istifade etmeye icaze verir.Amma muxtelif argumentlerle.
Burada qaydalar cox sadedir:
- Overload olunmus metodlarin argument listleri muxtelif olmalidi.
- Overload olunmus metodlarin return tipleri deyisken ola biler.
- Overload olunmus metodlar access modifier-i deyise biler.
- Overload olunmus metodlar check exception ata bilerler.
- 1 metod eyni class-da veya onun sub class-da overload oluna biler.
public class Animal{
public void eat(int y,String s) { }
}
public class Horse{
public void eat(int y,long s) throws IOException{ } // override-dan ferqli olaraq check ex.ata biler.Ancaq 1 ferq xeta burda deyilde run zamani olacaq.
}
Animal a=new Cat();
Burada a -referans tipidir.mueyyen edir hansi overload olunmus versiyanin secildiyini.(argument liste esaslanaraq).Compile vaxti bas verir.Overloaded olunmus metodda.
Burada new Cat(); obje tipidir.Basqa sozle,heap-de olan heqiqi objenin tipi.mueyyen edir hansi metodun secildiyin. Runtime vaxti bas verir.Override olunmus metodda.
Hiç yorum yok:
Yorum Gönder