This question has been asked in a C++ context लेकिन मैं जावा के बारे में उत्सुक हूं। आभासी तरीकों के बारे में चिंताओं लागू नहीं है (मुझे लगता है कि), लेकिन अगर आप इस स्थिति है:विधि श्रृंखला + विरासत एक साथ अच्छी तरह से खेल नहीं है?
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
}
वर्ग पदानुक्रम की इस तरह, वहाँ एक तरीका है कि नहीं करता है में this
वापस जाने के लिए (किसी भी तरह से है प्रभावी ढंग से) ऑब्जेक्ट प्रकार को अपस्टास्ट करें?
अब मैं समझता हूँ क्यों इतने सारे लोग जावा से नफरत है। –