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

Aruba Cloud - Virtual Private Server VPS
0 głosów
1,025 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,260 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,260 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,020 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,430 wizyt
pytanie zadane 7 października 2017 w Java przez zygmunt Początkujący (310 p.)
0 głosów
1 odpowiedź 1,785 wizyt
0 głosów
1 odpowiedź 276 wizyt

93,329 zapytań

142,323 odpowiedzi

322,400 komentarzy

62,662 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

Wprowadzenie do ITsec, tom 1 Wprowadzenie do ITsec, tom 2

Można już zamawiać dwa tomy książek o ITsec pt. "Wprowadzenie do bezpieczeństwa IT" - mamy dla Was kod: pasja (użyjcie go w koszyku), dzięki któremu uzyskamy aż 15% zniżki! Dziękujemy ekipie Sekuraka za fajny rabat dla naszej Społeczności!

...