2

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

4

2 回答 2

0

您可以在成员变量上创建一个protectedsetter,然后在子类的构造函数中覆盖超级变量的值:

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"); 
    }

}
于 2013-03-10T22:03:14.993 回答
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*/}

}

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

于 2013-03-10T21:58:53.360 回答