Kiedy używać super ()?
Obecnie uczę się dziedziczenia klas w moim kursie Java i nie rozumiem, kiedy użyć wywołania super()
?
Edit:
Znalazłem ten przykład kodu, gdzie super.variable
jest używany:
class A
{
int k = 10;
}
class Test extends A
{
public void m() {
System.out.println(super.k);
}
}
Więc rozumiem, że tutaj musisz użyć super
, aby uzyskać dostęp do zmiennej k
W super-klasie. Jednak w każdym innym przypadku, co robi super();
? Sama?
11 answers
Wywołanie dokładnie super()
jest Zawsze zbędny. Wyraźnie robi to, co w sposób dorozumiany byłoby zrobione w przeciwnym razie. To dlatego, że jeśli pominiesz wywołanie super konstruktora, bez argumentu Super konstruktor zostanie wywołany automatycznie. Nie mówiąc, że to zły styl; niektórzy ludzie lubią być wyraźni.
Jednakże, gdy staje się to przydatne, to gdy super konstruktor pobiera argumenty, które chcesz przekazać z podklasy.
public class Animal {
private final String noise;
protected Animal(String noise) {
this.noise = noise;
}
public void makeNoise() {
System.out.println(noise);
}
}
public class Pig extends Animal {
public Pig() {
super("Oink");
}
}
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-11-03 20:07:01
super
służy do wywoływania constructor
, methods
i properties
klasy rodzica.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-11-03 19:33:42
Możesz również użyć słowa kluczowego super
w podklasie, gdy chcesz wywołać metodę z klasy nadrzędnej, gdy ją nadpisałeś w podklasie.
Przykład:
public class CellPhone {
public void print() {
System.out.println("I'm a cellphone");
}
}
public class TouchPhone extends CellPhone {
@Override
public void print() {
super.print();
System.out.println("I'm a touch screen cellphone");
}
public static void main (strings[] args) {
TouchPhone p = new TouchPhone();
p.print();
}
}
Tutaj linia super.print()
wywołuje metodę print()
klasy nadrzędnej CellPhone
. Wyjście będzie:
I'm a cellphone
I'm a touch screen cellphone
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-09-15 16:30:28
Gdy chcesz, aby konstruktor klasy super został wywołany-aby zainicjalizować pola w nim. Zapoznaj się z tym artykułem, aby dowiedzieć się, kiedy go używać:
Http://download.oracle.com/javase/tutorial/java/IandI/super.html
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-11-03 19:28:48
Użyłbyś go jako pierwszej linii konstruktora podklasy do wywołania konstruktora jego klasy nadrzędnej.
Na przykład:
public class TheSuper{
public TheSuper(){
eatCake();
}
}
public class TheSub extends TheSuper{
public TheSub(){
super();
eatMoreCake();
}
}
Konstruowanie instancji TheSub
wywoła zarówno eatCake()
, jak i eatMoreCake()
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-09-15 16:15:26
Możesz go użyć do wywołania metody superclass (np. gdy nadpisujesz taką metodę, super.foo () etc) -- to pozwoli Ci zachować tę funkcjonalność i dodać do niej cokolwiek innego masz w nadpisanej metodzie.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-11-03 19:28:08
Super wywoła metodę rodzica. Zobacz: http://leepoint.net/notes-java/oop/constructors/constructor-super.html
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-11-03 19:28:18
Wywołujesz super()
, aby konkretnie uruchomić konstruktor swojej superklasy. Biorąc pod uwagę, że klasa może mieć wiele konstruktorów, możesz wywołać konkretny konstruktor używając super()
lub super(param,param)
oder, możesz pozwolić Javie obsłużyć to i wywołać standardowy konstruktor. Pamiętaj, że klasy, które podążają za hierarchią klas, podążają za relacją "is-a".
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-09-12 09:24:04
Pierwsza linia konstruktora podklasy musi być wywołaniem super()
, aby upewnić się, że konstruktor klasy nadrzędnej zostanie wywołany.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-09-12 17:42:43
Właśnie próbowałem, komentując super (); robi to samo bez komentowania jak powiedział @ Mark Peters
package javaapplication6;
/**
*
* @author sborusu
*/
public class Super_Test {
Super_Test(){
System.out.println("This is super class, no object is created");
}
}
class Super_sub extends Super_Test{
Super_sub(){
super();
System.out.println("This is sub class, object is created");
}
public static void main(String args[]){
new Super_sub();
}
}
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-10-19 09:11:21
Z dokumentacji oracle Strona :
Jeśli twoja metoda nadpisuje jedną z metod klasy nadrzędnej, możesz wywołać nadpisaną metodę za pomocą słowa kluczowego
super
.
Możesz również użyć super
, aby odnieść się do ukrytego pola(chociaż ukrywanie pól jest zniechęcane).
Użycie super
w konstruktorze podklas:
Wywołanie konstruktora klasy nadrzędnej musi być pierwszą linią w podklasie konstruktor.
Składnia wywołania konstruktora klasy superclass to
super();
Lub:
super(parameter list);
Z super()
wywoływany jest superklasowy konstruktor bez argumentu. Za pomocą super(parameter list)
wywoływany jest konstruktor klasy superclass z pasującą listą parametrów.
Uwaga: jeśli konstruktor nie wywoła jawnie konstruktora klasy nadrzędnej, kompilator Javy automatycznie wstawia wywołanie do konstruktora klasy nadrzędnej bez argumentu . Jeśli super klasa nie ma konstruktor bez argumentu, otrzymasz błąd w czasie kompilacji.
Related post:
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-09-25 10:07:58