gpt4 book ai didi

java - 我们可以在java中创建抽象类的实例吗

转载 作者:行者123 更新时间:2023-11-30 06:40:22 31 4
gpt4 key购买 nike

很抱歉问,我们知道的事实在 Java 中,你不能创建抽象类的实例,因为它没有完整的实现。抽象类的目的是作为子类的基础。那么关于 java 中的 NumberFormat 类是抽象的吗??

问题是这段代码怎么样:

NumberFormat numberFormatter = NumberFormat.getNumberInstance();
  1. 这是什么意思?如果我没记错的话,这意味着我们使用 numberFormatter 创建了 NumberFormat 的对象实例?或者什么?
  2. NumberFormater 是抽象的吧?所以我们需要创建它的子类。
  3. 如果我问的第一个问题是错误的事实,那么我们为什么要在此代码行上使用 numberFormatter.format(x);String numberStr = numberFormatter.format(x);

完整代码如下,非常感谢您的回复。

public class NumberFormatToy {   
public static void main(String args[]) {
double x = 1000.0/3.0;
NumberFormat numberFormatter = NumberFormat.getNumberInstance();
NumberFormat currFormatter = NumberFormat.getCurrencyInstance();
NumberFormat percentFormatter = NumberFormat.getPercentInstance();

String numberStr = numberFormatter.format(x);
String currStr = currFormatter.format(x);
String percentStr = percentFormatter.format(x);

System.out.println("double 1000.0/3.0 berformat number : "+ numberStr);
System.out.println("double 1000.0/3.0 berformat currency : "+ currStr);
System.out.println("double 1000.0/3.0 berformat percent : "+ percentStr);
}
}

最佳答案

正如您已经了解的那样,由于 NumberFormat 是抽象的,因此不可能这样做:

new NumberFormat();

但是,创建的实际对象可能(并且经常)不同于引用该对象的变量类型。在您的一个示例中 - NumberFormat numberFormatter = NumberFormat.getNumberInstance(); - NumberFormat.getNumberInstance() 返回的对象是扩展 NumberFormat.

这行代码打印出 NumberFormat.getNumberInstance() 返回的对象的类:

System.out.println(NumberFormat.getNumberInstance().getClass());

打印出:

class java.text.DecimalFormat

如果您查找 Javadoc for DecimalFormat ,您会看到它扩展了 NumberFormat

您还可以调用 NumberFormat.getNumberInstance() 并使用 NumberFormat 实现的接口(interface)之一存储结果(您可以看到那些in the Javadoc)。下面是一个示例,展示了如何创建 Serializable 类型的变量:

Serializable s = NumberFormat.getNumberInstance();

同样,使用构造函数创建 Serializable 的实例是无效的,因此这是不允许的:new Serializable()

关于java - 我们可以在java中创建抽象类的实例吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58401161/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com