public abstract class SuperClass {
public int x, y;
public int z = x + y;
}
SuperClass的每个子类都应该具有属性x,y和z。但是,虽然x和y对于所有子类可能不同,因此必须手动启动,但我如何能够聪明地启动z?
即我不想在SuperClass的每个子类中调用z = x + y
。
答案 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
的构造函数。
现在关于初始化它们......我不知道你想要实现什么,但是如果你想改变x
和y
以便z
1}}被保持为x + y
,您必须手动执行此操作。实现此目的的一种方法是在x
和y
的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;
}
}