在超类方法中使用子类成员变量?

时间:2013-03-10 21:48:20

标签: java

我有一个基类和子类。基类有常见的方法及其实现,我想在子类中使用但我想使用子类成员变量而不是超类。我不想在子类中重写相同的方法。 Java中有没有办法实现这一目标。

2 个答案:

答案 0 :(得分:0)

您可以使用方法来访问该成员并在子类中覆盖它。

Class A{
  public void DoStuff(){
     int aux = getResource; 
     /*cool things with aux*/
  }
  protected int getResource(){
    return internal_member;
  }
  private int internal_member;
}

Class B extends A{
  private int another_member;
  @Override
  public int getResource(){
     return another_member;
  }

}

但是考虑到这不会阻止人们让A级人员直接使用该成员,最好为成员和getter创建一个基类。

另一个选项,正如之前概述的那样,是将基类中的数据成员保护为子类并在子类中初始化它:

Class A{
  public void DoStuff(){
     /*cool things with internal_member*/
  }
  protected List internal_member;
  A(){internal_member = /*Set here a value*/}
}

Class B extends A{
  B(){internal_member = /*Set a different value here! you can even declare a member and assign it here*/}

}

如果需要,可以使用带参数的构造函数。

答案 1 :(得分:0)

您可以在成员变量&上创建protected setter。然后在子类的构造函数中覆盖超级变量的值:

class Animal {
   private String voice = "Oooo";

   protected void setVoice(String voice) {
       this.voice = voice;
   }

   public void speak() {
       System.out.println(this.voice);
   }

}

class Dog extends Animal {

    public Dog() {
        setVoice("woof"); 
    }

}