• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

question-closed Wywołanie metody toString() z maina z klasy nadrzędnej a nie metody nadpisanej.

0 głosów
291 wizyt
pytanie zadane 21 maja 2020 w Java przez Bazi Użytkownik (680 p.)
zamknięte 22 maja 2020 przez Bazi

Jak z metody main wywołać metodę toString() z klasy Object na obiekcie klasy Student, która nadpisuje tę metodę? 
Wiem, że mogę w klasie Student w metodzie toString() wywolac super.toString() ale mi chodzi o jednorazowe wywołanie z metody main. 

public class Student {
    int age;
    String name;

    public Student(int age, String name) {
        this.age = age;
        this.name = name;
    }

    @Override
    public String toString() {
        return this.name+"  "+this.age;
    }
}

// a tutaj main

public class Main {
    public static void main(String[] args) {
        Student bartosz = new Student(21, "Bartosz");
        System.out.println(((Object)bartosz).toString()); 
// no i Tu niestety wywołuje mi
//metodę toString z klasy Student a nie Object :/
    }
}


 

komentarz zamknięcia: Uzyskałem odpowiedzi na dane zagadnienie.

4 odpowiedzi

+2 głosów
odpowiedź 21 maja 2020 przez mbabane Szeryf (79,300 p.)
wybrane 22 maja 2020 przez Bazi
 
Najlepsza

Nie da się tego zrobić inaczej niż zawołać super.toString() wewnątrz nadpisanego toString. Jeśli to jednorazowa akcja tylko dla twojego testu, który uruchomisz raz i go usuniesz to po prostu za komentuj metodę toString w klasie Student, a potem ją od komentuj.

Implementacja metody toString w Object wygląda tak:

public String toString() {
    return getClass().getName() + "@" + Integer.toHexString(hashCode());
}

Tak więc jest to nic innego jak hashCode, więc równie dobrze możesz zrobić:

System.out.println(bartosz.getClass().getName() + "@" + Integer.toHexString(bartosz.hashCode()));

// lub jeszcze prosciej
 System.out.println(Integer.toHexString(bartosz.hashCode()));

 

komentarz 22 maja 2020 przez Bazi Użytkownik (680 p.)
Dzięki za odpowiedź. Temat uważam za zamknięty. Udanego weekendu! :)
+3 głosów
odpowiedź 21 maja 2020 przez RafalS VIP (122,820 p.)

Jest to niemożliwe: https://stackoverflow.com/questions/23484767/force-use-of-a-base-class-method-in-java

Próbujesz wyłączyć polimorfizm. Podobny przypadek tego co próbujesz zrobić, ale bardziej oczywisty w działaniu: 

class Animal{
    public void speak(){
        System.out.println("???");
    }
}

class Dog extends Animal{
    @Override
    public void speak() {
        System.out.println("Woof");
    }
}

public class Test {
    public static void main(String[] args) {
        Animal a = new Dog();
        a.speak(); // Woof
    }
}

 

komentarz 22 maja 2020 przez Bazi Użytkownik (680 p.)
No właśnie byłem ciekaw, czy da się ten polimorfizm ominąć. Dzięki wielkie za odpowiedź i link. Udanego weekendu życzę! :)
1
komentarz 22 maja 2020 przez mbabane Szeryf (79,300 p.)

czy da się ten polimorfizm ominąć.

Nigdy tego nie próbowałem robić, ale być może da się to osiągnąć refleksją.

0 głosów
odpowiedź 21 maja 2020 przez Landu Stary wyjadacz (11,840 p.)
Czy ty przypadkiem nie nadpisujesz metody obiektu używając @Override?
1
komentarz 21 maja 2020 przez tkz Nałogowiec (40,800 p.)
Samo @Override jest informacją dla programisty, nie dla maszyny wirtualnej. To co robi autor jest trochę bezsensu.
komentarz 21 maja 2020 przez Landu Stary wyjadacz (11,840 p.)
A to dobrze wiedzieć, nigdy jakoś nie miałem większej styczności z Javą
komentarz 22 maja 2020 przez Bazi Użytkownik (680 p.)

@tkz,  Tak, wiem, że to trochę bez sensu, ale po prostu byłem ciekaw czy jest taka możliwość :D

0 głosów
odpowiedź 21 maja 2020 przez Paweł Nąckiewicz Nałogowiec (48,870 p.)

po prostu 

System.out.printlin(bartosz)

Czytam drugi, trzeci, czwarty raz Twoje pytanie i chyba zgłupiałem. Chcesz wywołać metodę to string z obiektu Object poprzez Studenta?

bardzo bez sensu... ale może ten artykuł tobie pomoże 

komentarz 22 maja 2020 przez Bazi Użytkownik (680 p.)
Wiem, że ciężko jest się tutaj doszukać sensu, ale po prostu byłem ciekaw czy istnieje taka możliwość. Dzięki za link, i udanego weekendu życzę :D

Podobne pytania

0 głosów
1 odpowiedź 736 wizyt
pytanie zadane 7 października 2017 w Java przez zygmunt Początkujący (310 p.)
0 głosów
1 odpowiedź 861 wizyt
0 głosów
1 odpowiedź 103 wizyt
Porady nie od parady
Publikując kody źródłowe korzystaj ze specjalnego bloczku koloryzującego składnię (przycisk z napisem code w edytorze). Nie zapomnij o ustawieniu odpowiedniego języka z rozwijanego menu oraz czytelnym formatowaniu kodu.Przycisk code

85,728 zapytań

134,512 odpowiedzi

298,568 komentarzy

56,635 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto dwie polecane książki warte uwagi. Pełną listę znajdziesz tutaj.

...