我有一个基类和子类。基类有常见的方法及其实现,我想在子类中使用但我想使用子类成员变量而不是超类。我不想在子类中重写相同的方法。 Java中有没有办法实现这一目标。
答案 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");
}
}