我经常遇到这个问题,无法找到执行此操作的优雅方法。可以说我有A类是父类,B类是子类
class A {
protected Animal anim;
public A(){
}
}
class B extends A{
public B(){
anim = new Dog();
}
private doSomething(){
((Dog)anim).accessDogMethod();
}
}
我的问题总是与可变动画有关。我想访问特定的Dog方法。但是,除非我向下转换,否则我无法做到。我不想到处都垂头丧气。所以我发现的唯一方法是:
class B extends A{
private Dog dog;
public B(){
anim = new Dog();
dog = anim;
}
private doSomething(){
dog.accessDogMethod();
}
}
但是,必须有更好的方法。我想在父类和子类中都使用该变量,以便每个类都访问其相关信息
有什么建议吗?
您可以使用参数类型(即泛型)。
class A<T extends Animal> {
protected T anim;
public A(){
}
}
class B extends A<Dog> {
public B(){
anim = new Dog();
}
private doSomething(){
anim.accessDogMethod();
}
}
听起来您具有并行继承层次结构。这是一种常见的代码气味,表明您可能需要重新考虑您的设计。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句