• 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.

Object Storage Arubacloud
0 głosów
704 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,280 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,280 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,880 p.)
Czy ty przypadkiem nie nadpisujesz metody obiektu używając @Override?
1
komentarz 21 maja 2020 przez tkz Nałogowiec (42,000 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,880 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,990 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ź 1,071 wizyt
pytanie zadane 7 października 2017 w Java przez zygmunt Początkujący (310 p.)
0 głosów
1 odpowiedź 1,393 wizyt
0 głosów
1 odpowiedź 192 wizyt

92,551 zapytań

141,393 odpowiedzi

319,523 komentarzy

61,936 pasjonatów

Motyw:

Akcja Pajacyk

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

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...