Yöntem aşırı yükleme

Bugünkü yeni ve ilginç konumuz yöntem aşırı yüklemesi . Dikkatli olun — yöntem aşırı yüklemesi, yöntemi geçersiz kılma ile karıştırılmamalıdır.

Geçersiz kılmanın aksine, aşırı yükleme çok basit bir işlemdir. Aslında yöntemler üzerinde bir işlem değildir, ancak bazen korkunç parametrik polimorfizm terimiyle anılır .

Buradaki sorun, bir sınıf içindeki tüm yöntemlerin benzersiz adlara sahip olması gerektiğidir. Bu tamamen doğru değil. Daha doğrusu, bu hiç de doğru değil. Yöntem adının benzersiz olması gerekmez. Benzersiz olması gereken , yöntem adı ile yöntemin parametre türlerinin birleşimidir. Bu birleşim, yöntem imzası olarak bilinir.

Örnekler:

kod Tanım
public void print();
public void print2();
Buna izin verilir. İki yöntemin benzersiz adları vardır.
public void print();
public void print(int n);
Ve ayrıca bu. İki yöntemin benzersiz adları (imzaları) vardır.
public void print(int n, int n2);
public void print(int n);
Yöntemler hala benzersizdir
public int print(int a);
public void print(int n);
Ama buna izin verilmiyor . Yöntemler benzersiz değildir . Farklı türler döndürmelerine rağmen.
public int print(int a, long b);
public long print(long b, int a);
Ama bunu yapabilirsin . Yöntem parametreleri benzersizdir

İmza, yöntem adını ve parametre türlerini içerir . Yöntemin dönüş türünü ve parametre adlarını içermez . Bir sınıfın aynı imzalara sahip iki yöntemi olamaz - derleyici hangisini arayacağını bilemez.

Derleme sırasında kaybolduğu için parametre adları önemli değildir . Bir metot derlendikten sonra sadece ismi ve parametre tipleri bilinir. Dönüş türü kaybolmaz, ancak yöntemin sonucunun herhangi bir şeye atanması gerekmez, bu nedenle imzaya da dahil edilmez.

OOP ilkelerine göre , polimorfizm, farklı uygulamaları tek bir arayüzün arkasına saklıyor. Örneğin, yöntemi çağırdığımızda System.out.println(), hangi argümanların iletildiğine bağlı olarak farklı yöntemler çağrılır. Bu eylemdeki polimorfizmdir.

Bu nedenle, aynı sınıfta yer alan aynı adlara sahip farklı yöntemler, zayıf bir polimorfizm biçimi olarak kabul edilir.