如果将Number作为接口实现,是否会产生问题?有好处吗?

ski*_*iwi 6 java java-8

在最近的一个问题上,我遇到了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界面而不是抽象类有什么实际好处吗?

Roh*_*ain 1

这种变化肯定会立即破坏 API,并对 Java 编程世界造成严重破坏。您只是无法将类(也是自 Java 出现以来就存在的类)更改为接口,因为两者具有不同的含义。两者的使用方式不同。

例如,一旦创建了Number一个接口,直接子类Integer就会中断,因为类不能extend来自接口,但必须实现它。但Integer类延伸自Number.

您可能会说,在更改 时Number,Java API 设计者还可以相应地更改 Java API 中必要的子类。但他们不能忽视这样一个事实:其他人可能拥有从Number.

关于产生这个问题的事实还有一件事 -interface具有默认方法的类与类不同abstract这个问题在 SO 本身上已经讨论过很多次了 ,其中一个只有你回答。