İlginizi Çekebilir
Java Overloading Örnekleri
  1. Ana Sayfa
  2. Java
  3. Java Overloading Nedir?

Java Overloading Nedir?

Daha önce metotları ve constructor yapıları anlatırken kısada olsa konu içerisinde bahsettiğim overloading (aşırı yükleme) kavramını daha yakından tanıyabilmek için “Java Overloading Nedir” başlığını açmak ve bu konu üzerine bir rehber hazırlamak istedim.

Hadi programlarımıza esneklik katacak, nesne yönelimli programlamanın en güzel yanlarından birisi ve oldukça fonksiyonel bir yapıda olan overloading kavramını önce tanıyalım daha sonra örnekler yapmaya başlayarak konuyu anlatımımızı bitirelim. 💪🏻

Java Overloading Nedir?

Rehber olarak hazırladığım içeriklerde bir tanıtım yapacağım zaman önce teorik bilgisini daha sonra bu teorik bilginin aklımızda canlanabilmesi ve bu teorik bilgiyi rahatlıkla anlamlandırabilmemiz için örnek üzerinden tanıtım yapmaya gayret gösteriyorum, bu tanıtımımda yine aynı şekilde bir yol izleyeceğim.

Java Overloading, projelerimizde oluşturmuş olduğumuz metotların yapısal olarak yeniden yazılmasına, esneklik sahibi olmasına ve daha fazla işlevsel bir hal almasına olanak sağlayarak aynı isimde birden fazla metodumuzun oluşmasına imkan verir.

Bir örnek üzerinden bu yapımızı ele alalım. Örneğimiz için bir hesap makinesini düşünelim, bu hesap makinesinin toplama, çıkartma, bölme, çarpma gibi fonksiyonları vardır. Bu fonksiyonlardan toplama fonksiyonunu ele alarak örneğimizi detaylandıralım ve aklımızda canlanmasını sağlayalım. Bir toplama işlemini yaparken minimum iki sayıya ihtiyaç duyarız fakat bu işlemi istediğimiz takdirde üç sayı ile ya da dört sayıyla da yapmamız mümkündür.

👨🏻‍💻 Bu örneğimizi düşündüğümüz zaman toplama, çıkartma, bölme ve çarpma gibi işlem fonksiyonları sınıfımızın ilgili metot yapılarıdır. Bu metot yapılarından toplamayı ele aldığımız zaman minimum iki sayının lazım olduğunu belirttiğimizde ise buda metodumuzun içerisindeki parametre değerleridir. Bu metot yapımızı istediğimiz zaman parametre sayısını arttırarak yeni bir metot tanımlaması gerçekleştirmemiz ise overloading kavramının tanımlanması olacaktır.

Java Overloading Nedir
Java Overriding Nedir

Teorik bilgiyi ve elimden geldiğince sade bir şekilde konunun örnek yapısını ele alarak “Java Overloading Nedir” sorusunun tanımını yaptığıma göre artık aşırı yükleme (overloading) kavramını kullanırken nelere dikkat etmemiz gerektiğini konuşabiliriz.

Overloading Yaparken Uymamız Gereken Kurallar

Projelerimizde metot yapılarımızı aşırı yüklemek (overload) yapmak istediğimiz zaman dikkat edeceğimiz bazı hususlar vardır. Bu hususlar şu şekildedir:

  • Overload yapacağımız metotların isimlerinin aynı olması gerekmektedir.
  • Metotlarımızın sahip oldukları parametreler birbirinden farklı olmalıdır. Örneğin: metot(parametre 1) ve metot (parametre 1, parametre 2) şeklinde olmalıdır.
  • Overload işlemine tabi tuttuğumuz metot yapılarının dönüş tipleri birbirinden farklı olabilir. Örneğin: void metot(prm1) ve int metot(prm1,prm2) şeklinde dönüş tiplerini değiştirebiliriz.
  • Yukarıdaki madde üzerinde görüldüğü gibi devamı olarak ekstra bir tanımlama yapmak istiyorum, oluşturmuş olduğumuz metot yapılarının dönüş tiplerini sadece değiştirmemiz yetmez, ekstra olarak bir parametre tanımlaması veya çıkartması yapmamız gerekmektedir.

Projelerimiz overloading kavramını nasıl tanımlayabileceğimiz konusunda da fikir sahibi olduğumuza göre artık bu konuda örnekler yapmaya başlayabiliriz.🧑🏻‍💻👨🏻‍💻

Java Overloading Örnekleri

Konuyu rahatlıkla anlayabilmemiz ve teorik bilgiden sonra vermiş olduğum örnek anlatımını pekiştirmek için öncelikle bir hesap makinesi örneği oluşturmak istiyorum.

Unutmayın, bu hesap makinemizi oluştururken izlediğim adımları aşağıdaki maddelerden takip ederek sizlerde uygulayabilirsiniz.

  1. Öncelikle hesaplama işlemlerini gerçekleştirecek metotların yer alacağı “CalculatorManager” isminde bir sınıf oluşturarak örneğimin ilk adımını atmış oldum.
  2. Bu sınıfı oluşturduktan sonra gerekli işlemlerin gerçekleşebilmesi ve değerlerin hesaplanarak bir yerde tutulmasını istediğim için bazı değişkenlerin tanımlamasını gerçekleştirdim.
  3. Değişkenlerimin tanımlanmasından sonra hesap makinemizin standart olarak olması gereken iki parametre alan toplama, çıkartma, bölme ve çarpma metotlarının tanımlamasını gerçekleştirdim.
  4. Tanımlama işlemimden sonra “toplama” metodumu örnekte olduğu gibi ele alarak birden fazla parametre alırsa hangi işlemleri sırası ile gerçekleştirmesini gerektiğini tanıttığım bir overloading işlemi gerçekleştirdim.
  5. Yapmış olduğum bu işlemler sonucunda “CalculatorManager” sınıf yapım aşağıdaki kod satırlarına sahip oldu.

    package com.company;
    
    public class CalculatorManager {
        int a=0,b=0;
        String  mark= "-----";
        public String infoText(){
            return " ["+a+"] "+"+"+" ["+b+"]";
        }
        public void cikartma(int a,int b){
            this.a= a;
            this.b = b;
            System.out.println(mark+"\n-> Tanımladığınız İlk Değer: "+ a+"\n-> Tanımladığınız İkinci Değer: "+ b +"\n"+mark+"\n->"+infoText()+" Çıkartma İşleminin Sonucu:"+(a-b)+"\n"+mark);
        }
        public void carpma(int a,int b){
            this.a = a;
            this.b = b;
            System.out.println(mark+"\n-> Tanımladığınız İlk Değer: "+ a+"\n-> Tanımladığınız İkinci Değer: "+ b +"\n"+mark+"\n->"+infoText()+" Çarpma İşleminin Sonucu:"+(a*b)+"\n"+mark);
        }
        public void bolme (int a, int b){
            this.a = a;
            this.b = b;
            System.out.println(mark+"\n-> Tanımladığınız İlk Değer: "+ a+"\n-> Tanımladığınız İkinci Değer: "+ b +"\n"+mark+"\n->"+infoText()+" Bölme İşleminin Sonucu:"+(a/b)+"\n"+mark);
        }
        public void toplama(int a, int b){
            this.a = a;
            this.b = b;
            System.out.println(mark+"\n-> Tanımladığınız İlk Değer: "+ a+"\n-> Tanımladığınız İkinci Değer: "+ b +"\n"+mark+"\n->"+infoText()+" Toplama İşleminin Sonucu:"+(a+b));
        }
        // Overloading ettiğimiz toplama metodumuzun değer döndürücüsünü "String" olarak tanımladık.
        public String toplama(int a, int b,int c){
            this.a = a;
            this.b = b;
            String info = infoText()+ " + ["+c+"]";
            return mark+"\n-> Tanımladığınız İlk Değer: "+ a+"\n-> Tanımladığınız İkinci Değer: "+ b +"\n-> Tanımladığınız Üçüncü Değer: "+c
                    +"\n"+mark+"\n->"+info+" Toplama İşleminin Sonucu:"+(a+b+c);
        }
        public void toplama (int a, int b, int c, int d){
            this.a = a;
            this.b = b;
            String info = infoText()+ " + ["+c+"] + ["+d+"]";
            System.out.println(mark+"\n-> Tanımladığınız İlk Değer: "+ a+"\n-> Tanımladığınız İkinci Değer: "+ b +"\n-> Tanımladığınız Üçüncü Değer: "+c
                    +"\n-> Tanımladığınız Dördüncü Değer: "+d+"\n"+mark+"\n->"+info+" Toplama İşleminin Sonucu:"+(a+b+c+d)+"\n"+mark);
        }
    }
  6. Bu işlemlerden sonra bir konsol çıktısı alabilmek için “Main” sınıfıma giderek bazı tanımlamalar gerçekleştirdim. Bu tanımlamalar sonucunda ise sınıfım aşağıdaki gibi olmuştur.
  7. package com.company;
    
    public class Main {
        public static void main(String[] args) {
            CalculatorManager calculatorManager = new CalculatorManager();
            calculatorManager.toplama(50,100);
            System.out.println(calculatorManager.toplama(50,100,150));
            calculatorManager.toplama(50,100,150,300);
        }
    }

Kod Çıktısı:

Java Overloading Nedir
Java Overloading Örnekleri

Ekstra olarak bir örnek daha yapalım ve “Java Overloading Nedir” konumuzu sonlandıralım. Bu örneğimiz içerisinde klasik hale gelmiş öğrenci not hesaplama sistemini ele alarak bazı hesaplamalar ve tanımlama işlemleri gerçekleştirelim. Bu işlemleri uygularken izlediğim adımları aşağıdaki maddelerde sırası ile inceleyebilir ve daha sonrasında uygulayabilirsiniz.

  1. Tanımaların ve hesaplamaların yer alacağı “OverloadingManager” isminde genel bir sınıf oluşturdum.
  2. İkinci adım olarak oluşturmuş olduğum bu sınıfta vize, final ve ortalamaları tutacağım double değerinde değişkenler ve öğrencinin adının, soyadının, ortalamasına göre almış olduğu harf notunun ve ayraç olarak kullanacağım string değerine ait değişkenler tanımladığımı söyleyebilirim
  3. Bu bilgilerin girilip girilmediğini kontrol etmek ve aynı zamanda istenildiği zaman bilgilerin konsol ekranına yazdırılmasını sağlamak için “infoText” isminde bir metot tanımlaması gerçekleştirdim.
  4. Overloading işlemine başlamadan önce öğrencilerin almış oldukları notlar sonucunda elde ettikleri ortalamaya göre belirli harf notlarının oluşmasını sağlayacak “checkGrade” isminde bir metot tanımlaması gerçekleştirdim.
  5. Bu tanımlamalarımdan sonra overloading işlemini uygulayacağım “checkEx” isminde üç adet metot tanımlayarak içlerini doldurdum.
  6. Bu tanımlama işlemlerinden sonra “OverloadingManager” sınıf yapım aşağıda kod editöründe göreceğiniz gibi bir hâl almıştır.

    public class OverloadingManager {
        double exOne,exFinal,exValue;
        private String name,surName,exGrade,mark ="-----";
    
        public void infoText(){
            if(name != null){
                if(surName != null){
                    System.out.println(mark+"\n< Öğrenci Bilgileri >\n"+mark+"\n-> Öğrenci Adı: "+name +"\n-> Öğrenci Soyadı: "+surName +"\n"+mark);
                    System.out.println("-> Öğrencinin Vize Notu: "+ exOne +"\n-> Öğrencinin Final Notu: "+ exFinal
                            +"\n-> Öğrencinin Ortalaması: "+exValue+"\t-> Harf Notu: "+checkGrade()+"\n"+mark);
                }
                else{
                    System.out.println(mark+"\n< Öğrenci Bilgileri >\n"+mark+"\n-> Öğrenci Adı: "+name +"\n"+mark);
                    System.out.println("-> Öğrencinin Vize Notu: "+ exOne +"\n-> Öğrencinin Final Notu: "+ exFinal
                            +"\n-> Öğrencinin Ortalaması: "+exValue+"\t-> Harf Notu: "+checkGrade()+"\n"+mark);
    
                }
            }
            else{
                System.out.println(mark+"\n< Öğrenci Bilgileri Girilmemiş >\n"+mark);
                System.out.println("-> Öğrencinin Vize Notu: "+ exOne +"\n-> Öğrencinin Final Notu: "+ exFinal
                        +"\n-> Öğrencinin Ortalaması: "+exValue+"\t-> Harf Notu: "+checkGrade()+"\n"+mark);
            }
    
        }
        public  String checkGrade(){
            if(exValue>=88 && exValue <=100)
                exGrade = "AA";
            else if(exValue >= 70 && exValue <= 87)
                exGrade = "BA";
            else if(exValue >= 60 && exValue <= 69)
                exGrade = "BB";
            else if(exValue >= 50 && exValue <= 59)
                exGrade = "CB";
            else if(exValue >=40 && exValue <= 49)
                exGrade = "CC";
            else if(exValue >= 30 && exValue <= 39)
                exGrade = "DD";
            else if(exValue >=0 && exValue <=29)
                exGrade = "FF";
            else
                exGrade = "Tanımsız Aralık";
            return exGrade;
        }
    
        public double checkEx (double exOne, double exFinal){
            this.exOne = exOne;
            this.exFinal = exFinal;
            this.exValue = (exOne*0.4)+(exFinal*0.6);
            return exValue;
        }
        public double checkEx(double exOne, double exFinal, String name){
            this.exOne = exOne;
            this.exFinal = exFinal;
            this.name = name;
            this.exValue = (exOne*0.4)+(exFinal*0.6);
            return exValue;
        }
        public double checkEx(double exOne, double exFinal, String name, String surName){
            this.exOne = exOne;
            this.exFinal = exFinal;
            this.name = name;
            this.surName = surName;
            this.exValue = (exOne*0.4)+(exFinal*0.6);
            return  exValue;
        }
    }
  7. Tanımlama işlemlerimi gerçekleştirdikten sonra son aşama olarak “Main” sınıfıma giderek gerekli tanımaları sağlayarak ekran çıktısı almaya çalıştım. Bu aşamada uyguladığım tanımlamaları aşağıdaki kod editörü üzerinden inceleyebilirsiniz.
  8. package com.company;
    
    public class Main {
        public static void main(String[] args) {
          OverloadingManager overloadingManager = new OverloadingManager();
          overloadingManager.checkEx(100,95,"Emre","Çelen");
          overloadingManager.infoText();
        }
    }

Kod Çıktısı:

Java Aşırı Yükleme Nedir
Java Overloading Nedir

Eğer farklı bir bakış açısı ile overloading (aşırı yükleme) kavramını incelemek isterseniz Oracle tarafından hazırlanmış “Java Overloading Nedir” rehber içeriğine göz atmanızı öneririm. İlgili içeriğe buraya tıklayarak ulaşabilirsiniz.

Aklınıza takılan, sormak istediğiniz ya da konu işleyişi hakkında bir öneride bulunmak isterseniz aşağıda yer alan yorum yap kısmından benimle iletişime geçebileceğinizi unutmayın. Bilgi paylaştıkça çoğalır.💪🏻

Yorum Yap

Yazar Hakkında

Yazmayı, öğrenmeyi, öğrendiklerini paylaşmayı , kodlamayı ve günün birinde Yönetim Bilişim Sistemleri Uzmanı olmanın hayalini kuran birisiyim.

Yorum Yap