首先说明:
人 是父类 男人 和 女人 是子类
正确的转换像父类转换 :人=(人)new 男人,人=(人)new 女人;
你的情况情况: 男人=(人)new 人; 你new的是人。不一定是男人或
也许是个人是女人
你的代码:(修改) 就可以了。
Father f1 = new Son();
Son s1 = (Son) f1;
你说的NumberFormat 是个抽象类 是不能 实例化的必须通过它的子类。。
NumberFormat.getInstance();方法中 有这样一句。。你要看看源码
{
DecimalFormat format = new DecimalFormat(numberPatterns[entry], symbols);
return format ;
}
NumberFormat 是父 DecimalFormat 是子.
在父类中的是直接new的子类对象。。 当然可以转换成子类对象
就像你的代码一样改成 也是一样的
Son s1 = new Son();
Father f1 = (Father) s1;
理解一下java的多态。。继承~
getInstance()方法就是返回它的子类,也就是说可以返回DecimalFormat,这是工厂方法。
要获取具体语言环境的 NumberFormat(包括默认语言环境),可调用 NumberFormat 的某个工厂方法,如 getInstance()。通常不直接调用 DecimalFormat 的构造方法,因为 NumberFormat 的工厂方法可能返回不同于 DecimalFormat 的子类。如果需要自定义格式对象,可执行:
NumberFormat f = NumberFormat.getInstance(loc);
if (f instanceof DecimalFormat) {
((DecimalFormat) f).setDecimalSeparatorAlwaysShown(true);
}
DecimalFormat 包含一个模式 和一组符号。可直接使用 applyPattern() 或间接使用 API 方法来设置模式。符号存储在 DecimalFormatSymbols 对象中。使用 NumberFormat 工厂方法时,可从已本地化的 ResourceBundle 中读取模式和符号。