JavaRush/Блог/Архив info.javarush/Pet cat = new Cat() - какие методы может использовать пер...
vtimk
17 уровень

Pet cat = new Cat() - какие методы может использовать переменная "cat"?

Статья из группы Архив info.javarush
участников
Уважаемые 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 или же в случае переопределения метода вызывается метод из класса объекта? Спасибо.
Комментарии (3)
  • популярные
  • новые
  • старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
dimaMJ
Уровень 25
15 февраля 2015, 15:53
В данном случае вызовется переопределенный метод в классе Cat.
То что вы написали
Pet cat = new Cat();

означает, что с помощью переменной cat, можно будет вызвать все методы определенные в классе Pet, то есть личные методы класса Cat не будут видимы. Если же класс Cat переопределяет методы из класса родителя, то будет вызван переопределенный метод.
Если же допустим эти два метода будут статическими, то будет вызван метод определенный ни в обьекте, а в типе переменной.
vtimk
Уровень 17
15 февраля 2015, 16:10
То, что надо. Вы отлично сформулировали правило, беру себе в блокнот. А то я понимать — понимал, а сформулировать для себя не мог. Еще раз спасибо.
AndreGold
Уровень 28
4 марта 2015, 03:52
Pet cat = new Cat();
То же, но другими словами, НАБОР МЕТОДОВ, которые можно вызвать, определяется типом переменной, т.е можно вызвать все методы, которые есть в классе Pet, а КАКОЙ ИМЕННО МЕТОД будет вызван определяется типом обьекта, new Cat().