Java-da Statik və Dinamik Bağlama


JavaBaxılıb 43

Java-da bağlama

Java-da, məcburi funksiya çağırışı ilə metod gövdəsi arasındakı əlaqədir. Java'da iki növ bağlama var - statik və dinamik bağlama. Bağlama zamanı baş verdikdə kompilyasiya-zaman, biz buna deyirik statik məcburi. Bağlama zamanı baş verdikdə işləmə vaxtı, bu dinamik məcburi. Bəzi əsas fikirlərə sahib olmağınız vacibdir Java-da miras davam etməzdən əvvəl.

Java-da statik və dinamik bağlamaPin

Fərqli instansiya növləri

Əvvəllər ətraflı məlumat almırıq statik və Java-da dinamik bağlama, fərqli instansiya növləri haqqında məlumatımız olmalıdır.

Burada İşçi bir sinif, e bir İşçi növüdür

class Employee {
    public static void main(String[] args) {
    Employee e;
    }
}

Burada e, İşçi sinifinin bir nümunəsidir. Şəxs sinfini genişləndirdiyindən e, şəxs sinifinin bir nümunəsidir.

class Person {
....
}

class Employee extends Person {
      public static void main(String[] args) {
      Employee e = new Employee();
      }
}

Burada şəxs sinfi referansında bir uşaq sinfi referansı təyin edilmişdir. Başqa sözlə, p, bir işçi növü Şəxsdir. Employee sinfi Person sinfini genişləndirdiyindən bu mümkündür.

class Person {
...
}

class Employee extends Person {
     public static void main(String[] args) {
     Person p = new Employee();
     }
}

Java-da Statik Bağlama

Kompilyator tərtib zamanı metod gövdəsinə bağlanma metodunu təyin edə bildikdə, statik bağlama və ya erkən bağlama deyirik. Ümumiyyətlə, statik, özəl və son metodlar statik məcburidir. Bunun səbəbi, bu üsullar üçün metodun üst-üstə düşməsi mümkün deyildir. Beləliklə, tərtibçi kompilyasiya zamanı hansı sinif metodunu çağıracağını bilir.

Statik bağlamanın sadə bir nümunəsini görək. Burada tək bir metodla yalnız 1 sinifimiz var və Tələbə sinfinin istinad obyekti yaradırıq. Bu səbəbdən s.getName çağırdıqda, tərtibçi bunun Student class getName metoduna aid olduğunu bilir. Bağlama prosesində qarışıqlıq yoxdur.

class Student {
  public void getName() {
    System.out.println("Student Name");
  }
}
public class StatingBinding {

  public static void main(String[] args) {
    Student s = new Student();
    s.getName();
  }
}
Student Name

İndi aşağıdakı nümunəni nəzərdən keçirin. Bir ana sinifimiz var Şəxs statik üsulla getName və bir alt sinif Əməkdaş həm də statik üsulla getName. Əvvəlcə Person sinfi p1 obyekti yaradırıq. P1.getName tətbiq edildikdə birbaşa Parent sinif metodunu çağırır. Bunun səbəbi kompilyatorun kompilyasiya vaxtı ərzində bağlanma problemini həll etməsidir.

Sonra, Person tipli bir İşçi obyekti yaradırıq. Ana sinif metodu statik olduğundan, tərtibçi bu metodu ləğv edə bilməyəcəyimizi bilir. Bu səbəbdən p2.getName proqramını icra edərkən yalnız Person sinif metodunu çağırır. Hər iki metod çağırışı üçün “Şəxs Adı” yazdırmasının səbəbi budur.

class Person {
  public static void getName() {
    System.out.println("Person Name");
  }
}

class Employee extends Person {
  public static void getName() {
    System.out.println("Employee Name");
  }
}
public class StaticDemo {

  public static void main(String[] args) {
    Person p1 = new Person();
    Person p2 = new Employee();
    p1.getName();
    p2.getName();
  }

}
Person Name
Person Name

Java'da Dinamik Bağlama

Metod çağırışı ilə əlaqəli funksiyası arasında bağlanma işləmə zamanı baş verdikdə, onu dinamik bağlama və ya gec bağlama adlandırırıq. Bu, əsasən metodun ləğvində baş verir. Yeniləmə haqqında daha çox məlumat üçün müraciət edin Java-da polimorfizm. 

Metod əvəzləşdirməsində həm super sinif, həm də alt siniflər eyni metod adına sahibdir. İşləmə vaxtı təyin olunan obyekt tipinə əsasən, bağlanma prosesi zamanı müvafiq sinif metodunu çağırır.

Fərqi daha yaxşı başa düşə bilmək üçün yuxarıdakı kimi eyni nümunədən istifadə edə bilərik. Yalnız şey metodların statik olmamasıdır.

Burada, p1 şəxs tipli bir İşçi obyektidir. Beləliklə, p1.getName işçi metodunu çağırır. Metodlar statik olmadığından və tərtibçi kompilyasiya zamanı bağlama prosesini bilmədiyi üçün bu iş zamanı müəyyən edilir. Bundan sonra, p2 bir şəxs obyektidir və buna görə də p2.getName şəxs metodunu çağırır. Eynilə, e bir Employee obyektidir və e.getName, Employee metodunu çağırır. Bu 2 vəziyyətdə bağlanma prosesində birmənalılıq yoxdur.

class Person {
  public void getName() {
    System.out.println("Person Name");
  }
}

class Employee extends Person {
  public void getName() {
    System.out.println("Employee Name");
  }
}
public class DynamicDemo {

  public static void main(String[] args) {
    Person p1 = new Employee();
    Person p2 = new Person();
    Employee e = new Employee();
    p1.getName();
    p2.getName();
    e.getName();

  }

}
Employee Name
Person Name
Employee Name

Java-da statik və dinamik bağlama arasındakı fərq

Aşağıda, Java-da statik və dinamik bağlama arasındakı fərqlər verilmişdir.

Statik məcburiDinamik bağlama
Erkən bağlama və ya tərtib müddətinə bağlanma da deyilirGec bağlama və ya iş vaxtı bağlama da deyilir
Metod həddindən artıq yükləmə statik məcburidirMetodun ləğvi dinamik məcburidir
Bağlanmanı həll etmək üçün sinif növündən istifadə edirBağlanmanı həll etmək üçün obyekt növündən istifadə edir
Daha sürətli icraYavaş icra

arayış

Şərh yaz

Translate »
1