假设你有一个基类,动物.这个Animal类有各种抽象的和可重写的方法.
您有一个子类Cow,它扩展了Animal.此类实现并重写某些方法.
您还有另一个子类Pig,它扩展了Animal.这个类以不同的方式实现和覆盖一些方法.
最后,还有宠物这门课.这个Pet类需要重写Animal类中的某些方法,而保留用于Cow和Pig的AI方法等不变.
作为约束,我不能更改Alter the Cow and Pig类.但是,它基本上会表现得像牛和猪是宠物的子类,宠物是动物的子类.
以下是我所想的一个例子:
public abstract class Animal {
public abstract void eat();
public abstract void ai();
public abstract void die();
public abstract void dropLoot();
}
public class Cow {
@Override
public void eat(){//foo}
@Override
public void ai(){//bar}
@Override
public void die(){//fig}
@Override
public void dropLoot(){//this would run normally}
public void moo(){
//Method for Reason
}
}
public class Pig {
//Same thing here
}
public class Pet<T extends Animal> extends T //Just visual. This doesn't work {
@Override
public void die(){
//extra logic
base.die(); //Returns up to the cow or pig instance
}
@Override
public void dropLoot(){//this runs instead of whatever is in Cow or Pig classes}
//I can only override methods that exist in Animal class, so Cow.moo is out of reach
}
至少,这是我的 idea .或者,Pet可以是一个包装器,以某种方式将所需的方法重定向到其他方法.
public class Pet {
Animal animal;
@Override(animal.dropLoot()) //Hypothetical implementation that doesn't currently work
public void HandleDropLoot(){
//This runs instead of animal.dropLoot, acting as an override.
}
}
问题是,我不能更改Cow或Pig,所以我只能添加到代码中.这两种方法都适用于我的情况.
我试着找到一种简单的方法来使用(?扩展Animal),但这引发了编译器错误.
我try 使用泛型,但也不起作用.(即Pet扩展T)
我try 了将Animal作为具有包装的变量的 idea ,但我仍然存在覆盖或重定向Animal类中的方法的问题.