Ključna reč super

Ključna reč super u javi je referentna promenljiva koja se koristi da uputi na objekat neposredne roditeljske klase. Kad god se kreira instanca podklase, instanca roditeljske klase se kreira implicitno, tj. na nju upućuje referentna promenljiva super. Upotreba ključne reči super:
  1. super se koristi da uputi na instancnu promenljivu neposredne roditeljske klase.
  2. super() se koristi da pozove konstruktor neposredne roditeljske klase.
  3. super se koristi da pozove metodu neposredne roditeljske klase.

Super se koristi da uputi na instancnu varijablu neposredne roditeljske klase

Problem bez ključne reči super
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
class Vehicle{ 
  int speed=50
class Bike3 extends Vehicle{ 
  int speed=100
  void display(){ 
  System.out.println(speed); //ispisuje brzinu (speed) za Bike 
  
  public static void main(String args[]){ 
  Bike3 b=new Bike3(); 
  b.display(); 
}
Ispis na ekranu:
100
U ovom primeru, obe klase Vehicle i Bike imaju zajedničku osobinu speed. Na instancnu promenljivu tekuće klase upućuje instanca po defaultu, ali pošto moramo da uputimo na instancnu promenljivu roditeljske klase – moramo da koristimo ključnu reč super da bi se napravila razlika između instancne promenljive roditeljske klase i instancne promenljive tekuće klase. Rešenje sa ključnom reči super:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
class Vehicle{ 
  int speed=50
  
class Bike4 extends Vehicle{ 
  int speed=100
  
  void display(){ 
  System.out.println(super.speed); //sada će ispisati brzinu (speed) za Vehicle 
  
  public static void main(String args[]){ 
  Bike4 b=new Bike4(); 
  b.display(); 
}
Ispis na ekranu:
50

Super() se koristi da pozove konstruktor neposredne roditeljske klase

Ključna reč super može se takođe upotrebiti da pozove konstruktor roditeljske klase kao u sledećem primeru:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
class Vehicle{ 
  Vehicle(){System.out.println("Vehicle je kreiran");} 
  
class Bike5 extends Vehicle{ 
  Bike5(){ 
  super(); //poziva konstruktor roditeljske klase 
  System.out.println("Bike je kreiran"); 
  
  public static void main(String args[]){ 
  Bike5 b=new Bike5(); 
}
Ispis na ekranu:
Vehicle je kreiran
Bike je kreiran
Napomena: super() se dodaje u konstruktor svake klase automatski od strane kompajlera. Kao što je poznato, podrazumevani (default) konstruktor obezbeđuje kompajler automatski,ali on takođe dodaje super() kao prvu naredbu.Ako kreiramo svoj vlastiti konstruktor, a nemamo ni this() ni super() kao prvu naredbu, kompajler će obezbediti super() kao prvu naredbu konstruktora. Primer za ključnu reč super gde je super() implicitno obezbeđen od strane kompajlera:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
class Vehicle{ 
  Vehicle(){System.out.println("Vehicle je kreiran");} 
  
class Bike6 extends Vehicle{ 
  int speed; 
  Bike6(int speed){ 
  this.speed=speed; 
  System.out.println(speed); 
  
  
  public static void main(String args[]){ 
  Bike6 b=new Bike6(10); 
  
}
Ispis na ekranu:
Vehicle je kreiran
10

Super se koristi da pozove metodu neposredne roditeljske klase

Ključna reč super može se takođe upotrebiti da pozove metodu roditeljske klase. Ovo treba koristiti u slučaju kada podklasa sadrži istu metodu kao roditeljska klasa, kao u sledećem primjeru:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
class Person{ 
void message(){System.out.println("welcome");} 
  
class Student16 extends Person{ 
void message(){System.out.println("welcome to java");} 
  
void display(){ 
message(); //poziva metodu message() tekuće klase 
super.message(); //poziva metodu message() roditeljske klase 
  
public static void main(String args[]){ 
Student16 s=new Student16(); 
s.display(); 
}
Ispis na ekranu:
welcome to java
welcome
U ovom primeru, obe klase Student i Person imaju metodu message(), pa ako pozovemo metodu message() iz klase Student, to će pozvati metodu message() klase Student, a ne klase Person zato što se prioritet daje lokalno. U slučaju da u podklasi ne postoji metoda kao u roditeljskoj klasi, nema potrebe da se koristi super.U sledećem primjeru metoda message() je pozvana iz klase Student, ali klasa Student nema metodu message(), tako da se metoda message() može pozvati direktno. Program gdje ključna riječ super nije potrebna:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
class Person{ 
void message(){System.out.println("welcome");} 
  
class Student17 extends Person{ 
  
void display(){ 
message(); //poziva metodu message() roditeljske klase
  
public static void main(String args[]){ 
Student17 s=new Student17(); 
s.display(); 
}
Ispis na ekranu:
welcome

Comments

comments