2016-10-20 105 views
1

所以我正在为我的Java类工作,我无法想出一种方法来引用父类中的字段而不必通过它们通过构造函数。Java:在父类中引用子字段

比如我想我父类有这样的方法:

@Override 
    public String getImageFileName() {  
     String result = IMG_DEAD; 
     if (isAlive()) { 
      result = IMG_ALIVE; 
     } 
     return result; 
    } 

我想IMG_DEAD和IMG_ALIVE的字符串在我的孩子被定义,因为每个孩子都会有不同的。

这样做的最好方法是什么?我试过使用静态字段,但我总是最终引用我的父母。

我得到它的工作只是通过构造函数传递值,但我宁愿不必这样做,如果有更好的方法。这些变量也应该是静态的,因为它们对于每个类都是不变的。

+0

https://www.tutorialspoint.com/java/java_polymorphism.htm –

回答

2

这听起来像每个孩子需要提供的具体细节。要做到这一点,最好的办法通常是在孩子覆盖父的方法,像这样:

protected String imageFileName(boolean alive) { 
    return alive ? DEFAULT_IMG_ALIVE : DEFAULT_IMG_DEAD; 
} 

然后,在你的子类,重写方法:

@Override 
protected String imageFileName(boolean alive) { 
    return alive ? GRUE_IMG_ALIVE : GRUE_IMG_DEAD; 
} 

如果你想到需要来自孩子的图像,没有默认情况下,改为使用父方法abstract

+0

这个问题是我的孩子们都会用完全相同的方法重写这个方法,这对我来说似乎是失败了继承方法的目的。除此之外,如果我想改变这种方法,我将不得不在所有的孩子中改变它。我希望有一种方法可以覆盖子项中的字段,但不必覆盖方法。 – BananaPineapple

+0

@Robert相应地,用“完全相同的方法”覆盖“多态性的整个点” - 您可以为每个需要的类提供替代行为。覆盖领域将是一个严重的头痛,你仍然有完全相同的假设的未来维护问题。 – chrylis