当前位置: 首页 > 面试题库 >

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

呼延修然
2023-03-14
问题内容

我已阅读的源代码,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;
}

为什么Java创始人做到了这一点?

我看不到这些方法之间的巨大差异。它似乎相关。

聚苯乙烯

从长类:

  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;
    }

从整数类

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;
    }

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


问题答案:

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



 类似资料:
  • 问题内容: 它们之间有什么区别? 是Integer类型的数组列表。 版本1: 版本2: 问题答案: 将返回,然后调用它将返回整数作为type 。 转换的到被称为 拳击 。 将转换为的操作称为 拆箱,依次 类推,以便在其他原始类型及其对应的Wrapper类之间进行转换。 从Java 5开始,它将自动为您进行所需的转换(自动装箱),因此, 如果您使用的是Java 5或更高版本,则示例之间没有区别 。

  • 问题内容: 我得到了几种解释,但是到目前为止,我还无法理解Java中的抽象类和方法是什么。 有人说它必须与程序的安全性做些关系,另一些人说不是那样。 即使从Dietel&Dietel的书中,我也不明白它的目的。我们何时,何地,为什么使用它? 请像您正在教初学者一样进行解释,非常感谢您的帮助。 问题答案: 抽象类是无法实例化的类。唯一的目的是扩展其他类。 抽象方法是抽象类中的方法(必须声明为抽象),

  • 我知道抽象类可能包含抽象和具体方法(即主体实现)。我的问题是:子类可以从抽象超类继承/覆盖具体方法吗?其次,它们必须以实现抽象方法的方式实现具体方法吗?

  • 问题内容: 为什么Object类是Java中em的基类,而不是抽象类? 我已经有很长时间了,这个问题纯粹是出于好奇,仅此而已。我的代码或任何人的代码都没有中断,因为它不是抽象的,但是我想知道为什么他们将其具体化了? 为什么有人要这个Object类的“实例”(而不是引用的存在)?一种情况是糟糕的同步代码,该代码使用对象的实例进行锁定(至少我曾经以这种方式使用过一次……我的错)。 对象类的“实例”是否

  • 问题内容: 为什么将类实现为常规类而不是将 抽象方法实现为 抽象 类。 会不会带来任何问题?或以这种方式有什么用吗? 而且,该方法应该是一种非常特定的方法, 其功能不能由任何其他类实现 (如果我没记错的话)。因此,我想该关键字比其他任何方法都更适合此操作。 但是我可以重写此方法并根据需要使用它, 它显然只印了, 有人告诉你我会产生一个新线程吗? 除了使工程师取代您感到困惑之外,还有什么其他用途?

  • 问题内容: 什么是Java中的“抽象类”? 问题答案: 抽象类是无法实例化的类。通过创建可以实例化的继承子类来使用抽象类。抽象类为继承的子类做一些事情: 定义继承子类可以使用的方法。 定义继承子类必须实现的抽象方法。 提供一个公共接口,该接口允许子类与所有其他子类互换。 这是一个例子: 请注意,“ abstractMethod()”没有任何方法主体。因此,你不能执行以下操作: 没有实现的方法!因此