继承最佳实践Java
假设我有一个具有属性的父类发射器继承最佳实践Java,java,inheritance,Java,Inheritance,假设我有一个具有属性的父类发射器 private double launchAngle; private double launchAngleVariation; 还有一个构造器 public Emitter(double launchAngle, double launchAngleVariation) { this.launchAngle = launchAngle; this.launchAngleVariation = launchAngleVariation; } public
private double launchAngle;
private double launchAngleVariation;
还有一个构造器
public Emitter(double launchAngle, double launchAngleVariation)
{ this.launchAngle = launchAngle;
this.launchAngleVariation = launchAngleVariation;
}
public MobileEmitter(double launchAngle, int a)
{ super(); //how should this be handled?
this.a = a;}
和一个子类MobileEmitter,具有属性
private int a;
还有一个构造器
public Emitter(double launchAngle, double launchAngleVariation)
{ this.launchAngle = launchAngle;
this.launchAngleVariation = launchAngleVariation;
}
public MobileEmitter(double launchAngle, int a)
{ super(); //how should this be handled?
this.a = a;}
我的问题是,处理超级电话的最佳方式是什么
我是否应该在父类中创建一个空构造函数,并使launchAngle受保护,以便可以直接在子构造函数中赋值
或者在父类中创建一个单独的构造函数,将launchAngle作为参数,然后调用super(launchAngle)更好吗
这就是我认为你需要的。超级调用必须具有分配给它的某些值。在您的例子中,您正在调用Emitter类(父类)中的默认构造函数。这更像是一个样式问题,而不是代码问题,因此可能更适合另一个stackexchange站点。就个人而言,我会说创建一个构造函数
Emitter(launchAngle)
——因为Emitter拥有字段launchAngle,所以让Emitter设置您可能想要提交代码的字段感觉更好。我不会在发射器中添加构造函数,只是因为这个原因,如果它没有意义的话。我也不会将属性设置为protected
。我宁愿使用受保护的setter或super(launchAngle,0)
。MobileEmitter
的发射角度变化是什么?a
代表什么?它只是MobileEmitter
本地的任意参数,用于demonstration@standelaune在构造函数中调用可重写方法(即受保护的setter)会导致许多非常不愉快的错误: