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

时间:2014-03-23 19:13:12

标签: 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();
    }
}

如果是这种情况,使用Number抽象类的旧代码是否仍然可以编译?使Number接口而不是抽象类有什么实际好处吗?

1 个答案:

答案 0 :(得分:1)

这种变化肯定会立即破坏API,并导致破坏Java编程的世界。你不能将一个类(也就是Java那个时候存在的类)改成一个接口,因为它们都有不同的含义。两者都以不同的方式使用。

例如,只要你创建一个Number接口,直接的子类,比如Integer就会中断,因为一个类不能从接口extend,但必须实现它。但是Integer类来自Number

您可能会争辩说,在更改Number时,Java API设计器也可以相应地更改Java API中必需的子类。但是他们不能忽视这样一个事实,即其他人的类可能会从Number扩展出来。

关于这个问题产生的事实还有一件事 - 使用默认方法的interfaceabstract类不同。这是discussed quite a few times on SO itself,其中一个仅由您回答。