在最近的一个问题上,我遇到了Number抽象类的使用.
现在,由于Java 8在这里,有默认方法,因此Number 可以是一个接口并写成:
public interface Number {
public int intValue();
public long longValue();
public float floatValue();
public double doubleValue();
default public byte byteValue() {
return (byte)intValue();
}
default public short shortValue() {
return (short)intValue();
}
}
Run Code Online (Sandbox Code Playgroud)
Number如果是这种情况,使用抽象类的旧代码是否仍然可以编译?制作Number界面而不是抽象类有什么实际好处吗?
这种变化肯定会立即破坏 API,并对 Java 编程世界造成严重破坏。您只是无法将类(也是自 Java 出现以来就存在的类)更改为接口,因为两者具有不同的含义。两者的使用方式不同。
例如,一旦创建了Number一个接口,直接子类Integer就会中断,因为类不能extend来自接口,但必须实现它。但Integer类延伸自Number.
您可能会说,在更改 时Number,Java API 设计者还可以相应地更改 Java API 中必要的子类。但他们不能忽视这样一个事实:其他人可能拥有从Number.
关于产生这个问题的事实还有一件事 -interface具有默认方法的类与类不同abstract。这个问题在 SO 本身上已经讨论过很多次了 ,其中一个只有你回答。
| 归档时间: |
|
| 查看次数: |
65 次 |
| 最近记录: |