В Java мой ToString () не работает, как я ожидал - PullRequest
0 голосов
/ 01 октября 2018

У меня есть этот код, и я подумал, что toString(), который я переопределяю, сработает как в подклассе, так и в суперклассе

public class Person  {
    @Override
    public String toString(){
       System.out.printLn("im in Person  ");
       return "im in Person  ";
    }
}

public class Student extends Person {
    @Override
    public String toString(){

       System.out.printLn("im in Student");
       return "im in Student";
    }
}


Student s = new Student();

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

Ответы [ 2 ]

0 голосов
/ 01 октября 2018

В объектно-ориентированных терминах переопределение означает переопределение функциональности существующего метода.Во время выполнения JVM выясняет тип объекта и запускает метод, который принадлежит этому конкретному объекту.Следовательно, в вашем примере во время выполнения программы запускают метод, специфичный для объекта Student.

Если вам нужно вызвать метод из суперкласса, то вам нужно сделать это самостоятельно, вызвав super.toString().

0 голосов
/ 01 октября 2018
public class Person  {
    @Override
    public String toString(){
       return "im in Person  ";
    }
}

public class Student extends Person {
    @Override
    public String toString(){
         return String.format("%s\n%s", super.toString(), "im in Student");
    }
}

И вы можете называть это так, как делали.

...