No ale napisałem taki krótki kod:
package praca;
import java.util.ArrayList;
class Pracownik{
String imie;
String nazwisko;
double zarobki;
Pracownik(String imie, String nazwisko, double zarobki){
this.imie = imie;
this.nazwisko = nazwisko;
this.zarobki = zarobki;
}
@Override
public String toString(){
return "Imię: " + imie + ", Nazwisko: " + nazwisko + ", Zarobki: " + zarobki;
}
}
class Programista extends Pracownik{
double premia;
Programista(String imie, String nazwisko, double zarobki, double premia){
super(imie, nazwisko, zarobki);
this.premia = premia;
}
@Override
public String toString(){
return super.toString() + ", Premia: " + premia + "%";
}
}
class Technolog extends Pracownik{
double premia;
Technolog(String imie, String nazwisko, double zarobki, double premia){
super(imie, nazwisko, zarobki);
this.premia = premia;
}
public String toString(){
return super.toString() + ", Premia: " + premia + "%";
}
}
public class Praca {
public static void main(String[] args) {
ArrayList<Pracownik> lista = new ArrayList<>();
Pracownik p1 = new Pracownik("Lukasz", "Nowak", 2000);
Programista p2 = new Programista("Krzysztof", "Zapałka", 2500, 0.25);
Technolog p3 = new Technolog("Janusz", "Bąk", 2500, 0.2);
lista.add(p1);
lista.add(p2);
lista.add(p3);
for(Pracownik e: lista) System.out.println(e);
}
}
I kompilator nie wyrzuca mi żadnego błędu, bez problemu mogę dodawać Pracownika, Programistę i Technologa do tablicy Pracowników i później zostaną oni prawidłowo wyświetleni.
Nawet jeżeli fragment kodu:
Pracownik p1 = new Pracownik("Lukasz", "Nowak", 2000);
Programista p2 = new Programista("Krzysztof", "Zapałka", 2500, 0.25);
Technolog p3 = new Technolog("Janusz", "Bąk", 2500, 0.2);
zamienię na:
Pracownik p1 = new Pracownik("Lukasz", "Nowak", 2000);
Pracownik p2 = new Programista("Krzysztof", "Zapałka", 2500, 0.25);
Pracownik p3 = new Technolog("Janusz", "Bąk", 2500, 0.2);
Program działa identycznie więc ciągle nie rozumiem dlaczego powinienem tworzyć obiekty tak jak napisałem przy drugim sposobie, a nie tak jak jest to w programie czy też w pierwszym fragmencie.
Może ktoś mógłby zmodyfikować mój program tak żeby było widać różnicę dla której warto definiować obiekty np:
Pracownik p = new Programista();