根据属性B和C有效地启动属性A.

时间:2014-03-16 21:03:41

标签: java initialization abstract superclass

public abstract class SuperClass {
    public int x, y;
    public int z = x + y;
}

SuperClass的每个子类都应该具有属性x,y和z。但是,虽然x和y对于所有子类可能不同,因此必须手动启动,但我如何能够聪明地启动z? 即我不想在SuperClass的每个子类中调用z = x + y

2 个答案:

答案 0 :(得分:2)

x设为y protected,或通过适当的getter和setter方法使其可用于子类。否则子类不会看到它们 要初始化z,您可以在SuperClass的构造函数中设置它,如:

Superclass(int x, int y)
{
   this.x = x;
   this.y = y;
   this.z = x + y;
}

在继承的类中,然后在构造函数中使用super(x,y)来调用SuperClass的构造函数。

现在关于初始化它们......我不知道你想要实现什么,但是如果你想改变xy以便z 1}}被保持为x + y,您必须手动执行此操作。实现此目的的一种方法是在xy的setter方法中计算z。

修改
相应的二传手:

void setX(int x)
{
   this.x = x;
   z = x + y;
}

void setY(int y)
{
   this.y = y;
   z = x + y;
}

答案 1 :(得分:1)

  

我不想在SuperClass的每个子类中调用z = x + y。

然后在你的超类中给z一个默认值,例如x + y,或者如果你愿意,可以留空。然后在子类中,根据需要在构造函数中定义z。

public class SuperClass{

int x, y, z;

SuperClass(int x, int y){

    this.x = x;
    this.y = y;

    //pick a default value of z;
    z = x + y;
}

}

public class Example extends SuperClass {

Example(int x, int y){
    super(x , y);

    //pick another z implementation here;
    z = x * y ^ x;
}

}