JavaRush /Kurslar /All lectures for UZ purposes /Metodlarni overload qilish | 2-qism

Metodlarni overload qilish | 2-qism

All lectures for UZ purposes
Daraja, Dars
Mavjud

— Salom, Amigo! Bir necha kun oldin metodlarni overload qilish haqida gaplashgandik. Hammasini tushundingmi?

— Ha. Esimda. Har bir klassdagi metod o'ziga xos bo'lishi kerak. Metod klassda aynan shunday nom va parameter turiga ega bo'lmasa, u o'ziga xosdir, bu yerda parametrlarning tartibi ahamiyatga ega. 

— Ajoyib! Ko'rinib turibdi, o'sha darsni yaxshi o'rgangansan. Bugun sening bilimlaringni biroz kengaytirmoqchiman. Har bir holatda qaysi metod chaqiriladi deb o'ylaysan?

Kod
class Cat
{
 public static void print(int n)
 {
  System.out.println(n);
 }
 public static void print(short n)
 {
  System.out.println(n);
 }
 public static void print(Integer n)
 {
  System.out.println(n);
 }
 public static void print(String s)
 {
  System.out.println(s);
 } 
public static void main(String[] args)
{
  Cat.print(1);
  Cat.print((byte)1);
  Cat.print("1");
  Cat.print(null);
 }
}

— Javob bera olmayman.

— Birinchi holatda 1 int turiga ega, bizda int qabul qiladigan metod bor. Birinchi void print(int n) chaqiriladi.

Ikkinchi holatda, bizda byte qabul qiladigan metod yo'q. Lekin short va int ni qabul qiladigan ikki metod bor. Tur kengayishi standartiga ko'ra, byte birinchi short ga kengayadi, keyin esa int ga. Hukm – void print(short n) chaqiriladi.

Uchinchi holatda bizda String qabul qiladigan metod bor. void print(String s) chaqiriladi.

To'rtinchi holatda aniqlik yo'q. null ma'lum bir turga ega emas, kompilyator bu kodni kompilyatsiya qilishdan voz kechadi. Bunday hollarda Cat.print((Integer)null) ni yozish kerak uchinchi metodni chaqirish uchun va Cat.print((String)null) to'rtinchisini chaqirish uchun.

— Juda foydali, rahmat.

— Shuni yodda tut, qaysi metod chaqirilishi kerakligini aniqlash jarayonida, turlar faqat kengayishi mumkin, lekin torayishi mumkin emas. Misol:

Kod
class Cat
{
 public static void print(short n)
 {
  System.out.println(n);
 }
 public static void print(Integer n)
 {
  System.out.println(n);
 }

 public static void main(String[] args)
 {
  Cat.print((byte)1);
  Cat.print(1);
 }
}

Birinchi holatda, byte tipi short ga kengayadi va birinchi metod chaqiriladi: void print(short n)

Ikkinchi holatda int dan Integer ga ruxsat etilgan yashirin konversiya amalga oshiriladi va ikkinchi metod void print(Integer n) chaqiriladi.

— Kutilmagan holat.

— Yo'q, kutilmagan narsa bu yerda:

Java kodi Tavsif
 class Cat
{
 public static void print(Object o)
 {
  System.out.println(o);
 }
 public static void print(String s)
 {
  System.out.println(s);
 }

 public static void main(String[] args)
 {
  Cat.print(1);
  Cat.print(null);
 }
}
Birinchi holatda int Integer ga kengayadi va Integer uchun metod yo'qligi sababli eng mos metod chaqiriladi, ya'ni void print(Object o) metodi

Ikkinchi holatda, kompilyatsiya xatosi bo'lmaydi va void print(String s) metodi chaqiriladi, bu bir oz aniq emas.

— Umid qilaman, Amigo, bunday hollarda (byte) kabi tur o'zgarish operatorini ko'rsatish eng yaxshi ekanligini tushunding, qaysi metod chaqirilishini aniq bilsang.

— Qaysiidan bo'lmasin, metodlarni overload qilishdan hech qanday muammo kutmagan edim. Va mana senga. Rahmat, Risha, hushyor bo'laman va xotirjamlik qilmayman.

Izohlar
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION