W tej lekcji pojawi się słowo kluczowe super. Pokażę Ci czym to jest, a na końcu zobaczysz także praktyczne użycie w testach Selenium.
Słowo kluczowe super: linki i materiały
W poprzedniej lekcji poznaliśmy słowo kluczowe this. W tej także się ono pojawi więc jeżeli nie widziałeś/aś poprzedniej lekcji to zobaczysz ją tutaj. Przyda Ci się ta wiedza przed przejściem do bieżącej lekcji.
Konstruktor
Pierwszym użyciem słowa kluczowego super jest odwołanie do konstruktora klasy nadrzędnej. W naszym przykładzie mamy klasę Planet, która dziedziczy po klasie AstronomicalObject. W tej drugiej klasie znajduje się prosty konstruktor, który pozwala na stworzenie obiektu podając tylko jeden parametr, a jest nim nazwa obiektu astronomicznego.
Jeżeli chcemy móc stworzyć obiekt klasy Planet również korzystając z takiego konstruktora, to znaczy podając jedynie nazwę obiektu astronomicznego (w tym wypadku nazwę planety) to wystarczy w konstruktorze klasy Planet użyć słówka super i za jego pomocą wywołać konstruktor klasy nadrzędnej. Pamiętaj, że konstruktor w klasie dziedziczącej musi przyjmować i przekazywać parametr znajdujący się w konstruktorze klasy nadrzędnej. W naszym wypadku jest to nazwa obiektu.
public class AstronomicalObject {
private int orbitalPeriodInDays;
private float radius;
protected String name;
public AstronomicalObject(String name){
this.name = name;
}
}public class Planet extends AstronomicalObject {
private int numberOfMoons;
private int mass;
private float rotationPeriodInDays;
private boolean hasRings;
private String name;
public Planet(String name){
super(name);
}
}Użycie super nie ogranicza się tylko do tak prostego przykładu. Jeżeli nasz konstruktor w klasie dziedziczącej ma robić jeszcze coś ekstra, to może. Pamiętaj tylko, że super musi iść na początku.
public class AstronomicalObject {
private int orbitalPeriodInDays;
private float radius;
protected String name;
public AstronomicalObject(String name){
this.name = name;
}
public AstronomicalObject(String name, int orbitalPeriodInDays, float radius){
this.name = name;
this.orbitalPeriodInDays = orbitalPeriodInDays;
this.radius = radius;
}
}public class Planet extends AstronomicalObject {
private int numberOfMoons;
private int mass;
private float rotationPeriodInDays;
private boolean hasRings;
private String name;
public Planet(String name){
super(name);
}
public Planet(String name, int orbitalPeriodInDays, float radius, boolean hasRings){
super(name, orbitalPeriodInDays, radius);
this.hasRings = hasRings;
}
}Metody i pola klasy
Słówka super możemy także użyć, gdy chcemy się odwołać do metody ale pola klasy nadrzędnej. Możesz chcieć spytać: po co? Przecież skoro dziedziczymy po klasie nadrzędnej, to powinniśmy mieć normalnie możliwość użycia metod i pól tej klasy (oczywiście jeżeli modyfikatory dostępu nam na to pozwalają).
No i racja, ale co w sytuacji, gdy w obu klasach znajduje się jakaś metoda albo pole o tej samej nazwie? Wtedy właśnie przez słówko super możemy powiedzieć, że chcemy użyć metody z klasy nadrzędnej.
package Super;
public class AstronomicalObject {
private int orbitalPeriodInDays;
private float radius;
protected String name;
public AstronomicalObject(String name){
this.name = name;
}
public AstronomicalObject(String name, int orbitalPeriodInDays, float radius){
this.name = name;
this.orbitalPeriodInDays = orbitalPeriodInDays;
this.radius = radius;
}
public AstronomicalObject(){}
public int getOrbitalPeriod() {
return orbitalPeriodInDays;
}
}
package Super;
public class Planet extends AstronomicalObject {
private int numberOfMoons;
private int mass;
private float rotationPeriodInDays;
private boolean hasRings;
private String name;
public Planet(String name){
super(name);
}
public Planet(String name, int orbitalPeriodInDays, float radius, boolean hasRings){
super(name, orbitalPeriodInDays, radius);
this.hasRings = hasRings;
}
public Planet(int mass){
this.mass = mass;
}
@Override
public int getOrbitalPeriod() {
return super.getOrbitalPeriod()/365;
}
public String getName(){
return super.name;
}
}