Java-da polimorfizm


JavaBaxılıb 206

Sistem dizaynı ilə bağlı müsahibə sualları o qədər açıq ola bilər ki, düzgün hazırlaşmağı bilmək çox çətindir. İndi satın aldıqdan sonra Amazon, Microsoft və Adobe-nin dizayn dövrlərini sındıra bilirəm Bu kitabı. Gündəlik bir yenidən nəzərdən keçirin dizayn sualı və söz verirəm ki, dizayn dövrünü sındıra bilərsiniz.

Java-da polimorfizm OOPs konsepsiyasının digər vacib xüsusiyyətidir. Dərslikdə polimorfizmə bir baxış gördük Java-da OOP konsepsiya. Bu təlimatda polimorfizm və onun müxtəlif növləri haqqında ətraflı məlumat verəcəyik. Haqqında məlumat verəcəyik Statik Polimorfizm, Dinamik Polimorfizm, İşləmə polimorfizmi.

Java-da polimorfizm nədir

Adından da göründüyü kimi Java-da polimorfizm, qəbul etmə qabiliyyəti deməkdir çox formaları. Yunan sözlərindəndir harada Poliefir çox və deməkdir morf formalar deməkdir. Java-da java-da polimorfizm eynidir üsul müxtəlif yollarla həyata keçirilə bilər. Bunu anlamaq üçün bir düşüncəmiz olmalıdır javada miras bundan əvvəlki təlimdə öyrəndiklərimiz.

Java-da Polimorfizm növləri

Aşağıda javada müxtəlif polimorfizm növləri verilmişdir.

Java-da polimorfizmPin

Statik Polimorfizm

Statik metodu həddindən artıq yüklədiyimiz zaman buna statik polimorfizm deyirik. Polimorfizmi tərtib zamanı həll etdiyi üçün buna da ad verə bilərik kompilyasiya-zaman polimorfizm. Bu növ polimorfizmi java-da ya istifadə edə bilərik metod həddindən artıq yükləmə or operator həddindən artıq yükləmə. Statik polimorfizmdə kompilyasiya zamanı keçdiyimiz parametrlərə əsasən hansı metodu çağıracağımızı müəyyənləşdirir.

Nümunələrin köməyi ilə bunu ətraflı şəkildə anlayaq.

Metodun həddən artıq yüklənməsi

Eyni adda, lakin fərqli tətbiqetmə üsulları çox olduqda, buna həddindən artıq yükləmə metodu deyirik. Həddindən artıq yükləmə metodunu iki fərqli şəkildə həyata keçirə bilərik:

  • Fərqli sayda parametr
  • Fərqli parametr növləri.

Əvvəlcə a ilə həddindən artıq yükləmə nümunəsinə baxaq fərqli sayda parametr. Bu nümunədə bir sinif yaratdıq Sahə bunun 2 üsulu var computeArea (int) və computeArea (int, int). Hər iki metoddakı fərq, birinin adı 1, digəri isə metodun adı eyni olmasına baxmayaraq 2 parametrlidir. Beləliklə metodu 1 parametrdən istifadə etdikdə, computeArea (int) və metodu 2 parametrlə çağırdıqda computeArea (int, int) çağırır.

Metodun həddən artıq yüklənməsiPin

class Area {
  
  public void computeArea(int a) {
    int area = a *a;
    System.out.println("Area of square: " + area);
  }
   public void computeArea(int a, int b) {
     int area = a*b;
     System.out.println("Area of rectangle: "  + area);
   }
}
public class CalculateArea {

  public static void main(String[] args) {
    Area ar = new Area();
    ar.computeArea(5);
    ar.computeArea(4, 2);

  }

}
Area of square: 25
Area of rectangle: 8

Aşağıda, eyni metodun ola biləcəyi metod həddindən artıq yüklənmə nümunəsidir müxtəlif növ parametrlər. Aşağıdakı kodda bir metodumuz var çıxmaq 2 fərqli parametr növü ilə. Birinin int tipli, digəri ikiqat tipli parametrləri var. İndi, məlumat tipinə əsasən sinif obyektini istifadə edərək metodu çağırdıqda, uyğun metodu çağırır. Beləliklə, ilk metod tam ədədi ötürdüyümüz üçün çıxma (int, int) çağırır. İkinci metod, çıxmağı (ikiqat, ikiqat) çağırır, çünki ikiqat rəqəmlər ötürürük.

Metod həddindən artıq yükləməPin

class Difference {
  public void subtract(int a, int b) {
    int diff = a - b;
    System.out.println("Difference: " + diff);
  }
  public void subtract(double a, double b) {
    double diff = a - b;
    System.out.println("Difference: " + diff);
  }
}
public class MethodOverloadingDemo {

  public static void main(String[] args) {
    Difference d = new Difference();
    d.subtract(10, 5);
    d.subtract(5.51, 2.21);
  }

}
Difference: 5
Difference: 3.3

Operatorun həddən artıq yüklənməsi

Metod həddindən artıq yüklənməyə bənzər bir nümunə olan bir operatoru da ləğv edə bilərik statik javada polimorfizm. Ancaq biz yalnız “+”Java-dakı operator və digər operatorların həddindən artıq yüklənməsini dəstəkləmir. Nə zaman istifadə edirik Sim arasında operandlar kimi + nəticələnir Sim birləşdirmə. Nə zaman istifadə edirik nömrələri arasında operandlar kimi + ilə nəticələnir əlavə iki rəqəmin. Aşağıda bir nümunə var + operatorun həddindən artıq yüklənməsi.

class Operatordemo {
  public void operator(String s1, String s2) {
    String s = s1+s2;
    System.out.println("String concatenation: " + s);
  }
  
  public void operator(int x, int y) {
    int sum = x + y;
    System.out.println("Sum: "+ sum);
  }
}
public class OperatorOverloading {

  public static void main(String[] args) {
    Operatordemo o = new Operatordemo();
    o.operator("Good", "Evening");
    o.operator(4, 9);

  }

}
String concatenation: GoodEvening
Sum: 13

Dinamik Polimorfizm

Polimorfizm iş zamanı həll olunduqda buna deyirik dinamik or uzunluğu polimorfizm. Java-dakı bu tip polimorfizmdə, üst-üstə qoyulmuş metodu çağırmaq üçün super sinifin istinad dəyişənindən istifadə edir. Bu, istinad dəyişəninin istinad etdiyi obyektə əsaslanaraq, müvafiq sinifin ləğv edilmiş metodunu çağırması deməkdir. İstifadə edə bilərik üsulu ləğv etmək Dinamik polimorfizmi tətbiq etmək üçün konsepsiya.

Metodu dəyişdirmək

Alt sinif əsas sinifin eyni metoduna sahib olduqda, onu alt sinifin əsas sinif metodunu ləğv etdiyi mənasını aşan bir metod deyirik. Yaratdığımız bir obyekt növünə əsasən, uyğun sinifin metodunu çağırır. Bu o deməkdir ki, əgər biz super sinifin bir obyektini yaradırıqsa və alt sinifdən istifadə edərək müraciət etsək, o zaman alt sinif metodu deyilir. Bunu iş vaxtı hesabladığı üçün javada işləmə polimorfizmi olaraq adlandırırıq.

Aşağıdakı nümunə ilə bu konsepsiyanı aydın şəkildə anlaya biləcəksiniz. Bir ana sinif yaratdıq Vehicle və 2 alt sinif Velosiped və avtomobil. Ana sinifdə bir metod var sürət və hər iki alt sinif əsas sinif metodunu ləğv etdi sürət.

Məsələn nəqliyyat vasitəsi sinfinin bir obyekti yaratsaq və sürət metodunu (sürət) çağırırıqsa, bu, ana sinif metodunu çağırır. Məsələn Bike sinifindən (b.speed) yaradılan obyektdən istifadə edərək sürət metodunu çağırdıqda, Bike sinif metodunu çağırır. Eynilə, nümunə yaradılan obyektdən istifadə edərək metodu çağırdıqda (c.speed), bu da Class sinif metodunu çağırır.

Java-da polimorfizmPin

class Vehicle {
  public void speed() {
    System.out.println("Default speed");
  }
}

class Bike extends Vehicle {
  public void speed() {
    System.out.println("Bike speed");
  }
}

class Car extends Vehicle {
  public void speed() {
    System.out.println("Car speed");
  }
}
public class VehicleType {

  public static void main(String[] args) {
    //Create an instance of Vehicle
    Vehicle v = new Vehicle();
    v.speed();
    
    //Create an instance of Bike
    Vehicle b = new Bike();
    b.speed();
    
    //Create an instance of Car
    Vehicle c = new Car();
    c.speed();

  }

}
Default speed
Bike speed
Car speed

Aşağıda bir çox sinif nümunəsi yaratmaq üçün eyni obyekt adından istifadə edə biləcəyimiz başqa bir işləmə polimorfizmi nümunəsidir. Əvvəlcə bir obyekt elan edirik sinif Meyvələr Sonra yeni açar söz Meyvə sinfi üçün obyekt dəyişənini hazırlayırıq. Dad obyektinə zəng etmək üçün bu obyekti istifadə etdikdə, Fruits sinfinin dad metodunu çağırır. Bundan sonra, Apple sinfi üçün obyekt dəyişənini qurduğumuzda və bu obyektdən istifadə edərək dad metodu dedikdə, Apple sinifinin metodunu çağırır. Eynilə, Ananas sinfi üçün də olur.

class Fruits {
  public void taste() {
    System.out.println("Fruits taste");
  }
}

class Apple extends Fruits {
  public void taste() {
    System.out.println("Sweet taste");
  }
}

class Pineapple extends Fruits {
  public void taste() {
    System.out.println("Sour taste");
  }
}

public class FruitsDemo {

  public static void main(String[] args) {
    Fruits f;
    f = new Fruits();
    f.taste();
    f = new Apple();
    f.taste();
    f = new Pineapple();
    f.taste();
  }

}
Fruits taste
Sweet taste
Sour taste

Yuxarıda yazılmış metodu olmayan alt sinif metodunu dediyimiz başqa bir nümunəni nəzərdən keçirək. Belə bir vəziyyətdə valideynlərə sinif metodunu çağırır. AnimalDemo sinifdə metod yoxdur heyvan növü. Buna görə üsulu adlandırır Inək AnimalDemo sinifi Cow sinfini genişləndirdiyindən sinif.

class Animal {
  public void animaltype() {
    System.out.println("Animal");
  }
}

class Cow extends Animal {
  public void animaltype() {
    System.out.println("Herbivorous");
  }
}

public class AnimalDemo extends Cow{

  public static void main(String[] args) {
    Animal a;
    a = new AnimalDemo();
    a.animaltype();

  }

}
Herbivorous

Məlumat üzvü ilə işləmə polimorfizmi

Çalışma vaxtı polimorfizmində yalnız metod əvəzlənir və məlumat üzvü və ya dəyişən deyil. Aşağıdakı nümunədən bu fərqi aydın şəkildə başa düşə bilərik. Bir obyekt yaratdığımızda Məsələn SBI sinifindən Bank sinif, məlumat üzvləri ləğv edilmədiyi üçün super sinif dəyişənini çağırır. Alt sinif dəyişkəninə daxil olmaq üçün, alt sinifdən obyekt yaratmalıyıq, yəni SBI s = yeni SBI ().

class Bank {
  public double interestRate = 7.5;
}

class SBI extends Bank {
  public double interestRate = 6.4;
}
public class BankDemo {

  public static void main(String[] args) {
    Bank b = new SBI();
    System.out.println(b.interestRate);
    SBI s = new SBI();
    System.out.println(s.interestRate);
  }

}
7.5
6.4

Metodun həddindən artıq yüklənməsi və metodun ləğv edilməsi arasındakı fərq

Metodun həddən artıq yüklənməsiMetodu dəyişdirmək
Bu statik polimorfizmi tətbiq edirBu, dinamik polimorfizmi həyata keçirir
Bu tərtib zamanı olurBu iş zamanı olur
Eyni metodlar eyni sinifdə mövcuddurEyni metodlar müxtəlif siniflərdə mövcuddur

arayış

Crack Sistemi Dizayn Müsahibələri
Translate »
1