Java #21: przeciążanie metod

W poprzedniej lekcji pisałem o tym jak przesłaniać metody za pomocą dziedziczenia i adnotacji @Override. Teraz dowiesz się, jaka jest różnica między przesłanianiem (ang. override) a przeciążaniem (ang. overload) metody. Nie jest to wbrew pozorom to samo i często przeciążanie metod jest mylnie utożsamiane jako synonim przesłaniania. Przypatrz się klasom Worker i Lawyer.

public class Worker {
  private String name;
  
  public void showName() {
    System.out.println("Worker name " + name);
  }
}

Teraz napiszę klasę Lawyer dziedziczącą po Worker.

public class Lawyer extends Worker{
  private String name;
  
  public Lawyer(String name) {
    this.name = name;
  }

  @Override
  public void showName() {
    System.out.println("Lawyer name is " + name);
  }
  
  public void workOnCase() {
    System.out.print("Work on case number..");
  }
  
  public void workOnCase(int caseNumber) {
    System.out.println();
    workOnCase();
    System.out.println(" " + caseNumber);
  }
}

Przeciążanie metod a ich przesłanianie

Jak widzisz jest tu zastosowane zwykłe dziedziczenie i przesłonienie z użyciem adnotacji override. Nic ciekawe się tu nie dzieje. To teraz zobacz na dodatkowe metody workOnCase bez i z parametrem. Sygnatury są niemal identyczne, jedyną różnicą jest parametr caseNumber występujący w drugim przypadku. Ponad to zamiast duplikować kod z pierwszej metody można go wykorzystać w metodzie drugiej poprzez jej deklarację. Dzięki temu unikasz duplikacji kodu (wyobraź sobie, że masz tysiąc takich metod i się gdzieś pomyliłeś. Taka pomyłka byłaby bardzo czasochłonna.) zgodnie z zasadą: „Don’t repeat yourself„.

public class JobMain {

  public static void main(String[] args) {
    Lawyer lawyer = new Lawyer("Adam Kowalski");
    lawyer.showName();
    lawyer.workOnCase();
    lawyer.workOnCase(10);
  }
}

Teraz wywołaj powyższy main() i zobacz na efekty..

Lawyer name is Adam Kowalski
Work on case number..
Work on case number.. 10

W podobny sposób można przeciążać konstruktory, dodając im kolejne parametry w sygnaturze.

To wszystko na dziś. Lekcja jest bardzo prosta: To wszystko na dziś. Lekcja jest bardzo prosta: przeciążanie metod powinno kojarzyć Ci się z unikaniem duplikacji kodu w metodach o podobnych sygnaturach, przesłanianie za to używasz, w momencie dziedziczenia lub implementacji interfejsu.

Link do lekcji: https://github.com/developeronthego/java-middle/tree/master/src/main/java/middle/lesson4

Link do lekcji o przesłanianiu: https://developeronthego.pl/java-srednio-zaawansowane-3-przeslanianie-metod-override/

Stay in the Loop

Get the daily email from CryptoNews that makes reading the news actually enjoyable. Join our mailing list to stay in the loop to stay informed, for free.

Ostatnio dodane

- Advertisement - spot_img

Powiązane wpisy