抱歉,我们知道事实 在Java中,您无法创建抽象类的实例,因为它没有完整的实现。抽象类的目的是充当子类的基础。 那么关于java中的NumberFormat类是抽象的权利??
问题是这段代码如何:
NumberFormat numberFormatter = NumberFormat.getNumberInstance();
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);
}
}
答案 0 :(得分:3)
您已经了解,由于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
实现的接口之一存储结果(您可以看到in the Javadoc)。这是显示如何创建类型Serializable
的变量的示例:
Serializable s = NumberFormat.getNumberInstance();
并且类似地,使用构造函数创建Serializable
的实例也是无效的,因此不允许这样做:new Serializable()
。
答案 1 :(得分:1)
if (i % 2) setErrors(prevErros =>({ ...prevErros, email: test${i}})
类确实是抽象的,但是静态方法不能是抽象的。
因此,您可以在抽象类中定义一个静态方法,该方法返回从抽象类继承的类的对象。
方法 var str = "a.b.c.d#.e.f.g.h#.i.j.k.l";
var res = str.split(/[.#]/);
,NumberFormat
,getNumberInstance
等都是静态方法,它们返回扩展了getCurrencyInstance
的某个类的对象。
答案 2 :(得分:0)
如果您使用类似的代码-收藏夹列表= Collections.asList(“ a”,“ b”);这意味着您获得接口Collection的对象?原因是这仅意味着静态方法asList()返回实现Collection的内容。 因此,如果您看到这样的代码,请确保某个方法返回某个类的对象,并且如果您想知道哪个类,则只需按CTRL +单击此方法,您的IDE就会向您显示该代码,然后您将看到它返回什么。