Baza Wiedzy

Przeciążanie

      Wprowadzenie🔗

      Przeciążanie jest jednym z podstawowych mechanizmów Javy i programowania obiektowego ogółem. Pozwala on na tworzenie wielu metod, charakteryzujących się taką samą nazwą, ale różniących się ilością lub typem przyjmowanych argumentów. Tyczy się to również konstruktorów, dzięki czemu możemy udostępnić wiele sposobów na tworzenie obiektów.

       

      Przeciążanie metod🔗

      Załóżmy, że istnieje klasa Calculator, w której chcemy zdefiniować metody umożliwiające wykonywanie dodawania. Dodawanie będzie mogło być jednak wykonywane, albo na dwóch, albo na trzech liczbach, dodatkowo na liczbach całkowitych, albo zmiennoprzecinkowych. Dzięki przeciążaniu wszystkie cztery wersje metod będą mogły nosić wspólną nazwę add (dodaj).

      public class Calculator {
           
           public int add(int a, int b) {
               return a+b;
           }
           
           public int add(int a, int b, int c) {
               return add(a, b) + c;
           }
           
           public double add(double a, double b) {
               return a+b;
           }
           
           public double add(double a, double b, double c) {
               return add(a, b) + c;
           }
           
       }

      Możemy teraz skorzystać z naszych metod:

      public class CalcApp {
           public static void main(String[] args) {
               Calculator calc = new Calculator();
               int add1 = calc.add(2, 5); // int + int
               double add2 = calc.add(2.5, 4.5); // double, double
               int add3 = calc.add(1, 2, 3); // int int int
               double add4 = calc.add(1.5, 2.5, 3.5); // double double double
               System.out.println(add1);
               System.out.println(add2);
               System.out.println(add3);
               System.out.println(add4);
               
               double add5 = calc.add(5, 2.5);
               System.out.println(add5);
           }
       }

      W zależności od przekazanych argumentów wywołana zostaje odpowiednia wersja metody. Java stara się dopasować najbardziej zawężony typ, czyli pomimo iż iż metoda przyjmująca dwa double równie dobrze może przyjąć dwa inty, to wywołana zostaje prawidłowa metoda. Przekazują inta i doubla, na incie zostanie wykonana promocja typu.

      Kurs programowania Java

      Przeciążanie konstruktorów🔗

      Zasady przeciążania dotyczą również konstruktorów, które są niczym innym jak specjalną odmianą metod przeznaczoną do tworzenia obiektów.

      public class Product {
           
           private String name;
           private double price;
           //settery, gettery
           
           public Product(String name) {
               this.name = name;
           }
           
           public Product(String name, double price) {
               this(name);
               this.price = price;
           }
       
       }

      Definiując dwa konstruktory w klasie Product możemy utworzyć obiekty zarówno przekazując tylko nazwę (name), albo nazwę i cenę. Będzie to przydatne, gdy np. czasami znamy wszystkie niezbędne wartości, a w innym przypadku nie lub gdy część parametrów jest opcjonalna.

      public class Shop {
           public static void main(String[] args) {
               Product p1 = new Product("mleko"); //cena nieznana
               Product p2 = new Product("telewizor", 2599); //znamy i nazwę i cenę
           }
       }

      Najlepszy newsletter o Javie w Polsce

      Czy chcesz otrzymywać nowości ze świata Javy oraz przykładowe pytania rekrutacyjne? Zapisz się na newsletter i bądź na bieżąco! Otrzymasz także ekskluzywne materiały oraz informacje o nowych kursach i promocjach.

      Nikomu nie udostępniamy Twojego maila, a jeśli zechcesz to w każdej chwili możesz się wypisać.

      Komentarze do artykułu

      Wyłączyliśmy możliwość dodawania komentarzy. Poniżej znajdziesz archiwalne wpisy z czasów gdy strona była jeszcze hobbystycznym blogiem. Zapraszamy natomiast do zadawnia pytań i dyskusji na naszej grupe na facebooku.