java中的String类型的对象为啥可以自动转换成Object类型的?而Object却要强制转换成String类型的

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java中的String类型的对象为啥可以自动转换成Object类型的?而Object却要强制转换成String类型的相关的知识,希望对你有一定的参考价值。

比如
String a = "hello";
Object b = a;
这样可以直接用,而
Object a = "hello";
String b = (String)a;
需要在a前面加String才能通过编译。
String类不是Object类的子类么,那么String应该继承Object类了,那为什么父类的变量可以直接用子类的对象,而子类不能直接用父类的?

子类是继承父类的,那么子类可能有自己独特的一些方法和属性是父类没有的
而所有父类的公开(public)方法都会被子类所拥有。
简单说,子类可以调用所有父类的public(protected因为外部无法访问,这里不提)方法,而父类却不能调用子类独特的方法,所以,子类可以直接转换为父类,而父类是无法转换为子类的
参考技术A String b = (String)a; 这样叫向下转型,需要精确指定类型。
可以这样理解 假设a是人(Ojbect) b是孩子(String), String b = a; 这句话可以理解为人是孩子,这样不太对,是吧? 因为人可能不是孩子,所以精确一下 加上个修饰(String 可以理解成定语)变成String b = (String)a; 这样就能保证实例化的是一个孩子对象(String b)本回答被提问者和网友采纳
参考技术B 首先你要了解什么叫父类和子类,Object是所有类的父类,它和String的关系就好比:球和篮球的关系。球这个类是所有球的父类,篮球和足球。。。都是它的子类。
FootBall fb = new FootBall();
Ball a = fb;(你可以说足球是球)
但是
Ball b = new BasketBall();
FootBall f = b;(这里说球是足球就不行了)

将string类型转换为decimal为啥会自动四舍五入

decimal是一种非常适合来记录金额的类型。
应该是默认精确到小数点后两位的,如果string的值精度过高,自然会四舍五入。
如果是在数据库中的话,可以设置decimal精度的 decimal(18,2)
参考技术A 因为decimal数据类型本来就是四舍五入这种机制。

以上是关于java中的String类型的对象为啥可以自动转换成Object类型的?而Object却要强制转换成String类型的的主要内容,如果未能解决你的问题,请参考以下文章

将string类型转换为decimal为啥会自动四舍五入

Java:父类对象为啥能转换成子类对象

在java Web项目中 数据库中的主键类型integer类型那么实体类中应该用啥类型或最好用啥类型?为啥?

java中的强制类型转换

java ) char类型可以自动转化成String类型吗?

C#中的自动类型转换