Скажем, у вас есть классы Dad
и Son
, которые определены следующим образом
public class OverLoadedToString {
public static void main(String[] args) {
Son son = new Son();
son.test();
son.test(90);
}
}
class Dad {
void test() {
System.out.println("Dad - test");
}
}
class Son extends Dad {
void test(int testTime) {
System.out.println("Son - test1" + testTime);
}
}
Класс Son
расширяется Dad
, поэтому test()
без аргументов наследуется дляSon
, так же, как у вашего ExtendsAbstract
класса toString()
без аргументов, наследующих класс Object
(каждый класс в Java наследует класс Object).
Затем в классе Son я добавил новый метод test(int testTime)
, у которого есть аргумент, который отличает test()
и test(int testTime)
, что называется методом overloading
.В вашем ExtendsAbstract
классе есть два toString
метода: один наследуется без аргументов, а другой вы определили.
Теперь позвольте мне показать вам поток наследования
Object ---> Abstract ---> ExtendsAbstract
Объектный класс toString()
методы печатает адрес памяти, мы можем переопределить его в наших классах, чтобы изменить его определение, вы можетевернуть любую строку, которую вы хотите.Но вы нигде не переопределили его ни в классе Abstract
, ни в классе ExtendsAbstract
, поэтому в обоих классах он напечатает адрес памяти.
Теперь в вашем классе Ongoing
вы вызываете этот класс ObjecttoString()
метод, который всегда печатает адрес памяти.Ваша путаница заключается в том, что вы думаете, что переопределили метод toString()
, но на самом деле вы только что перегрузили его и вызываете неправильный метод для ожидаемого вывода.
Ссылка: Перегрузка и переопределение Java