logo

Java'da Yöntem Aşırı Yüklemesi

  1. Yöntemi aşırı yüklemenin farklı yolları
  2. Hayır'ı değiştirerek. argümanların
  3. Veri tipini değiştirerek
  4. Dönüş türünü değiştirerek yöntemin aşırı yüklenmesi neden mümkün değil?
  5. Ana yöntemi aşırı yükleyebilir miyiz?
  6. Tür Yükseltme ile yöntem aşırı yükleme

Eğer bir sınıf Aynı ada sahip ancak parametreleri farklı olan birden fazla yönteme sahipse, buna şu şekilde bilinir: Yöntem Aşırı Yüklemesi .

Eğer tek bir işlem yapmamız gerekiyorsa metodların aynı isme sahip olması okunabilirliği arttırır. programı .

java swing eğitimi

Verilen sayıları toplama işlemi yapmanız gerektiğini varsayalım, ancak herhangi bir sayıda argüman olabilir, eğer iki parametre için a(int,int) ve üç parametre için b(int,int,int) gibi bir yöntem yazarsanız, o zaman Adı farklı olduğundan sizin ve diğer programcıların yöntemin davranışını anlaması zor olabilir.

Bu nedenle, programı hızlı bir şekilde anlamak için yöntem aşırı yüklemesi yapıyoruz.

Java yönteminin aşırı yüklenmesi

Yöntemin aşırı yüklenmesinin avantajı

Yöntem aşırı yükleme programın okunabilirliğini artırır .

Yöntemi aşırı yüklemenin farklı yolları

Java'da yöntemi aşırı yüklemenin iki yolu vardır

  1. Argüman sayısını değiştirerek
  2. Veri türünü değiştirerek

Java'da Metot Aşırı Yüklemesi yalnızca metodun dönüş tipini değiştirerek mümkün değildir.


1) Yöntemin Aşırı Yüklenmesi: no. argümanların

Bu örnekte iki yöntem oluşturduk, ilk add() yöntemi iki sayının toplamasını, ikinci add yöntemi ise üç sayının toplamasını yapıyor.

Bu örnekte, oluşturuyoruz statik yöntemler böylece yöntemleri çağırmak için örnek oluşturmamıza gerek kalmaz.

 class Adder{ static int add(int a,int b){return a+b;} static int add(int a,int b,int c){return a+b+c;} } class TestOverloading1{ public static void main(String[] args){ System.out.println(Adder.add(11,11)); System.out.println(Adder.add(11,11,11)); }} 
Şimdi Test Edin

Çıktı:

 22 33 


2) Yöntem Aşırı Yüklemesi: bağımsız değişkenlerin veri türünü değiştirme

Bu örnekte birbirinden farklı iki yöntem oluşturduk. Şimdi Test Edin

Çıktı:

 22 24.9 

S) Yöntemin Aşırı Yüklenmesi neden yalnızca yöntemin dönüş türünü değiştirerek mümkün olmuyor?

Java'da, yalnızca belirsizlik nedeniyle yöntemin dönüş tipi değiştirilerek yöntemin aşırı yüklenmesi mümkün değildir. Belirsizliğin nasıl ortaya çıkabileceğini görelim:

 class Adder{ static int add(int a,int b){return a+b;} static double add(int a,int b){return a+b;} } class TestOverloading3{ public static void main(String[] args){ System.out.println(Adder.add(11,11));//ambiguity }} 
Şimdi Test Edin

Çıktı:

 Compile Time Error: method add(int,int) is already defined in class Adder 

System.out.println(Adder.add(11,11)); //Burada Java hangi sum() yönteminin çağrılması gerektiğini nasıl belirleyebilir?

Not: Derleme Zamanı Hatası, Çalışma Zamanı Hatasından daha iyidir. Bu nedenle, aynı yöntemin aynı parametrelere sahip olduğunu bildirirseniz, Java derleyicisi derleyici zaman hatası oluşturur.

Java main() yöntemini aşırı yükleyebilir miyiz?

Evet, yöntemin aşırı yüklenmesi nedeniyle. Yöntem aşırı yüklemesi yoluyla bir sınıfta istediğiniz sayıda ana yönteme sahip olabilirsiniz. Ancak JVM dize dizisini yalnızca argüman olarak alan main() yöntemini çağırır. Basit örneği görelim:

 class TestOverloading4{ public static void main(String[] args){System.out.println('main with String[]');} public static void main(String args){System.out.println('main with String');} public static void main(){System.out.println('main without args');} } 
Şimdi Test Edin

Çıktı:

her biri için daktilo
 main with String[] 

Yöntem Aşırı Yüklemesi ve Tür Yükseltme

Eşleşen bir veri türü bulunamazsa bir tür diğerine dolaylı olarak yükseltilir. Aşağıda verilen şekil ile kavramı anlayalım:

Tür Yükseltmesi ile Java Yönteminin Aşırı Yüklenmesi

Yukarıdaki şemada gösterildiği gibi bayt, kısa, int, uzun, kayan nokta veya çift olarak yükseltilebilir. Kısa veri türü int, long, float veya double'a yükseltilebilir. Char veri türü int, long, float veya double vb. olarak yükseltilebilir.

TypePromotion ile Yöntem Aşırı Yükleme Örneği

 class OverloadingCalculation1{ void sum(int a,long b){System.out.println(a+b);} void sum(int a,int b,int c){System.out.println(a+b+c);} public static void main(String args[]){ OverloadingCalculation1 obj=new OverloadingCalculation1(); obj.sum(20,20);//now second int literal will be promoted to long obj.sum(20,20,20); } } 
Şimdi Test Edin
 Output:40 60 

Eşleşme bulunursa Tür Yükseltmesi ile Yöntem Aşırı Yükleme Örneği

Yöntemde eşleşen tür bağımsız değişkenleri varsa tür yükseltme yapılmaz.

 class OverloadingCalculation2{ void sum(int a,int b){System.out.println('int arg method invoked');} void sum(long a,long b){System.out.println('long arg method invoked');} public static void main(String args[]){ OverloadingCalculation2 obj=new OverloadingCalculation2(); obj.sum(20,20);//now int arg sum() method gets invoked } } 
Şimdi Test Edin
 Output:int arg method invoked 

Belirsizlik durumunda Tür Yükseltmesi ile Yöntemin Aşırı Yüklenmesi Örneği

Yöntemde eşleşen türde argüman yoksa ve her yöntem benzer sayıda argümanı destekliyorsa belirsizlik olacaktır.

 class OverloadingCalculation3{ void sum(int a,long b){System.out.println('a method invoked');} void sum(long a,int b){System.out.println('b method invoked');} public static void main(String args[]){ OverloadingCalculation3 obj=new OverloadingCalculation3(); obj.sum(20,20);//now ambiguity } } 
Şimdi Test Edin
 Output:Compile Time Error 

Bir türün yükseltilmesi örtülü olarak kaldırılmaz; örneğin double'ın yükseltilmesi örtülü olarak herhangi bir türe kaldırılamaz.