为什么shortValue()方法是具体的,但intValue()是抽象到java.lang.Number?

gst*_*low 6 java oop

我已经阅读了源代码,java.lang.Number我想知道为什么

  1. intValue()
  2. longValue()
  3. floatValue()
  4. doubleValue()

是抽象的但是

  1. shortValue()
  2. byteValue()

具体的.

源代码:

public abstract class Number implements java.io.Serializable {

      public abstract int intValue();

      public abstract long longValue();

      public abstract float floatValue();

      public abstract double doubleValue();

      public byte byteValue() {
        return (byte)intValue();
      }

     public short shortValue() {
        return (short)intValue();
      }

    private static final long serialVersionUID = -8742448824652078965L;
}
Run Code Online (Sandbox Code Playgroud)

为什么java创始人已经成功了?

我没有看到这些方法之间存在很大差异.它似乎是相关的.

PS

来自Long class:

  public byte byteValue() {
        return (byte)value;
    }


    public short shortValue() {
        return (short)value;
    }


    public int intValue() {
        return (int)value;
    }


    public long longValue() {
        return (long)value;
    }


    public float floatValue() {
        return (float)value;
    }


    public double doubleValue() {
        return (double)value;
    }
Run Code Online (Sandbox Code Playgroud)

来自Integer类

public byte byteValue() {
        return (byte)value;
    }


    public short shortValue() {
        return (short)value;
    }


    public int intValue() {
        return value;
    }


    public long longValue() {
        return (long)value;
    }


    public float floatValue() {
        return (float)value;
    }

    public double doubleValue() {
        return (double)value;
    }
Run Code Online (Sandbox Code Playgroud)

因此我们看到了很多相同的代码.我认为copy paste开发很糟糕,但我认为Java创始人有理由这样做.

GOT*_*O 0 4

根据Number类的文档,在JDK1.1中首先添加了byteValue和方法。shortValue这与第一个 JDK 版本中已经可用的其他“Value”方法不同。我的假设是,这两种方法被具体化,是为了保持与现有(也是非标准)子类的兼容性Number,否则这些子类会因在超类中添加新的抽象方法而被破坏。