<分区>
有没有办法在编译时强制参数的子类类型?
类似于 this
但不是实例 - 类?
我有类(class):
public abstract class Animal {
public abstract void follow(Animal a); // <-- how to declare it?
}
但我希望子类永远不要使用 Animal
基类,而是只使用它本身(派生类)作为参数:
public class Fish extends Animal {
@Override
public void follow(Fish f) { // error here, since it expects Animal
tagAlong(f);
}
private void tagAlong(Fish f) {
// do something
}
}
我想要一个 Fish
只使用 Fish
类型的参数,而不是 Animal
类型的参数,就像另一个子类 Parrot
将仅在方法 follow()
上使用一个 Parrot
参数。
我强烈希望在编译时强制执行此操作,但如果没有其他可能,运行时是一个(不太理想的)选项。