java多态 思想进行测试,实例化输出结果 报错

在测试类中用多态的思想来进行测试,分别实例化猫和狗的对象,并输出结果。

package domain;
public abstract class Animal {
    private String name;
    private int age;
    public Animal() {
    }
    public Animal(String name, int age) {
        this.name = name;
        this.age = age;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public int getAge() {
        return age;
    }
    public void setAge(int age) {
        this.age = age;
    }
    public abstract void eat();
}


package domain;
//定义猫类Cat,继承父类Animal
public class Cat extends Animal{
    private String lovely;
    public Cat() {
    }
    public Cat(String name, int age, String lovely) {
        super(name, age);
        this.lovely = lovely;
    }
    public String getLovely() {
        return lovely;
    }
    public void setLovely(String lovely) {
        this.lovely = lovely;
    }
    public void Catch(){
//        System.out.println(getName()+"抓老鼠");
        System.out.println("猫抓老鼠");
    }

    @Override
    public void eat(){
//        System.out.println(getName()+"吃鱼");
        System.out.println("猫吃鱼");
    }
}


package domain;
//定义狗类Dog,继承Animal类
public class Dog extends Animal{
    private String weight;
    public Dog() {
    }
    public Dog(String name, int age, String weight) {
        super(name, age);
        this.weight = weight;
    }
    public String getWeight() {
        return weight;
    }
    public void setWeight(String weight) {
        this.weight = weight;
    }
    //特有成员方法 看门
    public void lookDoor(){
//        System.out.println(getName()+"看门口");
        System.out.println("狗看门口");
    }
    @Override
    public void eat(){
//        System.out.println(getName()+"吃骨头");
        System.out.println("狗吃骨头");
    }
}


package domain;

public class Test1 {
    public static void main(String[] args) {
        //生成Animal对象
        Animal a = new Cat();
        a.setName("豆豆");
        a.setAge(5);
        System.out.println(a.getName() + "," + a.getAge());
        a.eat();

        Cat c = (Cat) a;
        c.Catch();
        System.out.println("----------------------");

        Animal d = new Dog();
        d.setName("阿拉斯加");
        d.setAge(1);
        System.out.println(d.getName() + "," + d.getAge());
        d.eat();

        Dog d1 = (Dog) a;
        d1.lookDoor();

        if(d instanceof Dog){
            Dog d2= (Dog) a;
            d1.lookDoor();
        }else if(d instanceof Cat){
            Cat c1 = (Cat) a;
            c1.Catch();
        }

        }
    }


img

请问怎样修改代码才可以运用多态思想实例化,并输出答案呢?
谢谢

你为什么要把猫变成狗,这是谁家的多态
你的父类对象呢,为什么不装进父类对象里
从你的代码里就能看出来,你根本没理解到底什么是多态
你父类对象里根本没有catch和eat方法呀
先去复习多态的基本概念,搞清楚了再来写代码,不要瞎写乱试