我经常遇到这种情况,并且无法找到这样做的优雅方式。假设我有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();
}
}
然而,必须有更好的方式。我想要父类和子类中的变量,以便每个类访问它们的相关信息
有什么建议吗?
答案 0 :(得分:3)
您可以使用参数类型(即泛型)。
class A<T extends Animal> {
protected T anim;
public A(){
}
}
class B extends A<Dog> {
public B(){
anim = new Dog();
}
private doSomething(){
anim.accessDogMethod();
}
}
听起来你有并行继承层次结构。这是一种常见的代码气味,表明您可能想重新考虑您的设计。