[英]Constructor implementation inside an abstract class (Java)
我试图在一个抽象类中创建一个构造函数,然后使另外两个类对其进行扩展。 但是-我在某个变量下得到了这条黄线,说它从未在本地读取,但是如果删除它,则会出现编译错误。
看起来像这样:
public abstract class SizeFilters {
private double value; // this one never read locally
private int MIN_VALUE = 0;
public SizeFilters(double value) {
if (value >= MIN_VALUE) {
this.value = value;
} else {
throw new IllegalArgumentException(
"Value must be a positive number.");
}
}
和扩展的类:
public class GreaterThanFilter extends SizeFilters {
private double value;
public GreaterThanFilter(double value) {
super(value);
}
我应该忽略该警告,还是我做错了什么?
非常感谢!!!
在子类中,您隐藏了超类中定义的变量。 这是因为您已声明一个具有相同名称的字段: value
:
public abstract class SizeFilters {
private double value; // this one never read locally
public class GreaterThanFilter extends SizeFilters {
private double value; // hides the field in the parent class
结果,即使您在子类中的其他位置使用value
字段,超类字段也始终会发出警告,因为该字段永远不会被读取。
我怀疑您需要从子类中删除您的value
字段,并在您的超类中提供getValue()
方法以提供对其的访问。 或者只是使超类中的字段protected
而不是private
。
该警告基本上告诉您,您的类具有一个已初始化的字段,但是该类的任何方法都不会使用该字段(并且子类无法使用,因为它是私有的)。
因此,这暗示您的类要么缺少使用该字段的方法,要么该字段无用,因此可以将其删除。
您收到警告的原因很可能是因为它实际上从未在构造函数中使用过。 如果以后要在类中使用它(通过getter方法或其他方法)使用它,请忽略该警告。
您永远不会阅读此变量。 您唯一要做的就是赋予它一个值,但您从未读过它,而是它的价值。
我认为您应该将SizeFilters
的double value
SizeFilters
为protected
,然后删除在GreaterThanFilter
类的子类中定义的double value
。 因此,您可以使用基本抽象类中继承的那个。
至于您的问题,以及所有其他提到的答案,是因为您从未读取过value属性,所以只需对其进行设置。 编译器告诉您,它从未使用过
您不应忽略该警告。 私有成员对子类不可见,因此,如果您不在抽象类中访问它,则根本不会对其进行访问。 如果您打算在子类中访问它,请添加一个吸气剂或对其进行保护。
另一方面,如果抽象类的唯一目的是共享成员,则建议您避免这样做。 您应该共享功能(方法),但不能单独共享成员。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.