[英]Can removing final from a class definition break backwards compatibility?
[英]Does removing a redundant superinterface from a Java class break binary compatibility?
在以下示例中:
interface I {
int F = 1;
}
class A extends B implements I { ... }
class B implements I { ... }
class A
上的implements I
是多余的。 如果我删除它,它会破坏二进制兼容性吗?
问题背景:如果我在class A
上调用getFields()
,我会从interface I
获得公共字段F
,但是如果我删除冗余implements I
,我将不再获得字段F
。
让我们在示例中添加一个 C 类。 所以你有了
interface I {
int F = 1;
}
class B implements I { ... }
class A extends B implements I { ... }
class C extends B { ... }
我重新排列了它们,所以超类在最上面。
由于超类 B 实现了 I,而 C 类似于 B,我希望它也实现了 I。因此,类 A 上的implements I
应该是多余的,可以删除。
另一方面,如果你删除类 B 上的implements I
,它会对 C 产生影响,C 也将不再实现 I。因此 B 上的implements I
不是多余的,因为它要求 B 和所有子类都实现 I .
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.