Programowanie średniozaawansowane #4: przesłanianie i 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. Przypatrz się klasom Worker i Lawyer.

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

 

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);
  }
}

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() i workOnCase() 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

 

To wszystko na dziś. Lekcja jest bardzo prosta: przesłanianie powinno kojarzyć Ci się z dziedziczeniem, a przeciążanie z unikaniem duplikacji kodu w metodach o podobnych sygnaturach.

Dodaj komentarz