Methodenverkettung + Vererbung passen nicht gut zusammen?

Diese Frage wurde in einem C ++ - Kontext gestellt aber ich bin neugierig auf Java. Die Bedenken bezüglich virtueller Methoden gelten nicht (glaube ich), aber wenn Sie diese Situation haben:

abstract class Pet
{
    private String name;
    public Pet setName(String name) { this.name = name; return this; }        
}

class Cat extends Pet
{
    public Cat catchMice() { 
        System.out.println("I caught a mouse!"); 
        return this; 
    }
}

class Dog extends Pet
{
    public Dog catchFrisbee() { 
        System.out.println("I caught a frisbee!"); 
        return this; 
    }
}

class Bird extends Pet
{
    public Bird layEgg() {
        ...
        return this;
    }
}


{
    Cat c = new Cat();
    c.setName("Morris").catchMice(); // error! setName returns Pet, not Cat
    Dog d = new Dog();
    d.setName("Snoopy").catchFrisbee(); // error! setName returns Pet, not Dog
    Bird b = new Bird();
    b.setName("Tweety").layEgg(); // error! setName returns Pet, not Bird
}

Gibt es in dieser Art von Klassenhierarchie eine Möglichkeit, zurückzukehren?this auf eine Weise, die den Objekttyp (effektiv) nicht auf den Kopf stellt?

Antworten auf die Frage(5)

Ihre Antwort auf die Frage