Уважаемые Java'рашевцы, допустим есть код, в котором переопределяется метод в наследуемом классе:
class Pet {
String name;
String age;
String getString() {
return "Домашнее животное";
}
}
class Cat extends Pet {
String getString() {
return "Кот Рыжик";
}
}
public static void main(String[] args) {
Pet cat = new Cat();
cat.getString();
}
скажите пожалуйста, какой вариант метода getString() будет вызван для переменной cat?
В лекциях прочитал, что можно вызывать методы объекта, только если они присутствуют в классе, который использовался в качестве типа ссылки на объект, не смотря на фактический тип объекта. Значит-ли это, что в данном случае будет вызван метод из класса Pet или же в случае переопределения метода вызывается метод из класса объекта?
Спасибо.
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ
То что вы написали
означает, что с помощью переменной cat, можно будет вызвать все методы определенные в классе Pet, то есть личные методы класса Cat не будут видимы. Если же класс Cat переопределяет методы из класса родителя, то будет вызван переопределенный метод.
Если же допустим эти два метода будут статическими, то будет вызван метод определенный ни в обьекте, а в типе переменной.
То же, но другими словами, НАБОР МЕТОДОВ, которые можно вызвать, определяется типом переменной, т.е можно вызвать все методы, которые есть в классе Pet, а КАКОЙ ИМЕННО МЕТОД будет вызван определяется типом обьекта, new Cat().