Пожалуйста помогите разобраться. вроде бы решил задачу но не пойму до конца что и как происходит. 1. После присваивании типу Pet pet объект класса Cat(); pet.setName("Я - пушистик"); присваивает name значение "Я - пушистик"? 2. потом System.out.println(pet.getName()); выводит то что возвращает метод getName()? то есть "Я - пушистик". 3. А когда мы переопределяем метод setName(); класса Cat, значит уже метод setName() класса Pet не будет работат? 4.и в методе setName() класса Кот, на что указывает слово-ключ this?
package com.javarush.task.task12.task1223;

/*
И снова Пушистик…
*/

public class Solution {
    public static void main(String[] args) {
        Pet pet = new Cat();

      pet.setName("Я - пушистик");

        System.out.println(pet.getName());
    }

    public static class Pet {
        protected String name;

        public Pet() {
        }

        public final String getName() {
            return name;
        }

        public void setName(String name) {
            this.name = name;
        }

    }

    public static class Cat extends Pet {
public void setName(String name){
this.name="";

}
    }
}