Referencja super

0

Witam, mam pytanie:

Mam dwie klasy, jedną bazową i jedną która po niej dziedziczy.
W klasie która dziedziczy nadpisuję metodę toString(), a w klasie bazowej NIE.

Czy mogę wywołać metodę toString() klasy bazowej w klasie która dziedziczy
referencją super?
I co ta metoda wtedy zwraca?
Czy odwołuje się i tak do klasy Object?

0

Tak możesz wywołać metodę super().

0

I co wtedy ta metoda zwraca?

0

No właśnie? Wróci ta metoda? jak?

0

Zajrzyj tutaj:
http://www.javatpoint.com/understanding-toString()-method

Możesz wywołać - zostanie użyta jej domyślna implementacja.

PS. Przez te 25 minut zdążyłbyś po prostu sprawdzić.

0

Wszystko ok ale mam kod:

@Override
	public String toString() {
		String wynik;
		wynik= super.toString() + ", ";
		wynik= wynik + this.getClass(); + ", test";
		return wynik;
	}

. . .

System.out.println(test.toString());

Wynik:
p.Klasa@2a139a55, class p.Klasa, test

oraz bez super:

@Override
	public String toString() {
		String wynik;
		wynik = this.getClass(); + ", test";
		return wynik;
	}

. . .

System.out.println(test.toString());

Wynik:
class p.Klasa, test

I wszystko jest jasne, dzięki super otrzymuję: p.Klasa@2a139a55
Więc mogę wykonać metodę super ale i tak zwróci mi klasę podrzędną?

1

W standardowej nomenklaturze klasa NADRZĘDNA = klasa bazowa = klasa Z KTÓREJ dziedziczysz i z tejże klasy wywoła się metoda jeśli zawołasz przez super

0

Wywołałeś przez super.toString() implementację z klasy bazowej, ale obiekt nadal jest klasy potomnej, dlatego wypisuje ci nazwę klasy potomnej.

1

Off-topic: Jeśli kiedykolwiek pojawi ci się w głowie pytanie "czy mogę zrobić X w języku programowania Y?" najlepiej będzie jeśli spróbujesz to zrobić i kompilator ci powie czy możesz.

0

Wszystko rozumiem tylko dostałem takie polecenie:
Masz dwie klasy, jedna dziedziczy, jedna jest główna,
Ta która dziedziczy nadpisuje toString(), a główna nie.
Czy możesz wywołać toString() klasy bazowej referencją super w klasie podrzędnej.
Jeśli tak co zwraca ta metoda?

I tyle

0
  1. Możesz
  2. Zwróci to samo co dla klasy bazowej.

A twój przykład który napisałeś jest bez sensu i stąd cały problem.

class A{
}

class B{
    @Override
     public String toString(){
         return "Pochodna!";
     }
     public String superToString(){
         return super.toString();
     }
}

I teraz utwórz sobie obiekt klasy B i wywołaj obie te metody i zobacz co zwrócą.

0

btw. super to nie referencja w przeciwienstwie do this

1 użytkowników online, w tym zalogowanych: 0, gości: 1