使用不同的作用域访问子类和父类中的相同变量

我经常遇到这个问题,无法找到执行此操作的优雅方法。可以说我有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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章