使用不同的范围访问子类和父类中的相同变量

时间:2016-02-28 13:02:46

标签: java

我经常遇到这种情况,并且无法找到这样做的优雅方式。假设我有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();
    }
}

然而,必须有更好的方式。我想要父类和子类中的变量,以便每个类访问它们的相关信息

有什么建议吗?

1 个答案:

答案 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();
    }
}

听起来你有并行继承层次结构。这是一种常见的代码气味,表明您可能想重新考虑您的设计。