java中可以将父类对象强制转换为子类对象吗?直接将父类对象强制转换为子类对象,与将上转型对象强制

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java中可以将父类对象强制转换为子类对象吗?直接将父类对象强制转换为子类对象,与将上转型对象强制相关的知识,希望对你有一定的参考价值。

java中可以将父类对象强制转换为子类对象吗?直接将父类对象强制转换为子类对象,与将上转型对象强制转换为子类对象,最终的效果一样吗?

可以,但必须满足一个条件,向下转型时必须知道当前对象是子类的对象。 参考技术A class A
int age;

String name;


class B extends A
String telephone;


这里B具有三个字段,age,name,telephone。
如果
A a = new B();
那么将会丢弃B的telephone字段,但是还是可以得到一个完整的A对象。

但是如果
B b = new A();

此时,A并没有telephone字段,并不能得到一个完整的B对象。
不知道通过这个列子你能否懂得。

或者从语义上来说,
汽车,火车,飞机,都是交通工具,汽车火车,飞机都是交通工具的子类。

你可以说汽车火车,飞机都是交通工具,但是不能说交通工具是汽车,或者交通工具就是火车,飞机。

Java 如何实现父类转换为子类的效果?

现有一个类A,有若干方法,这些方法的返回类型都是A对象。现在我想要的效果是:
因为A中的属性不能满足我的需求,我想新建一个类B(里面有我需要添加的新属性)来extends A,但是A以及那些方法都不能动,如果使得方法返回的A对象,能够转换为B?
因为Java中 父类不能强制转换为子类
借助于接口能实现不?如果可以,我可以允许改变A 来实现某个接口、。

"如果使得方法返回的A对象",既然你继承了A方法,那么B也有返回A的方法,在方法里返回B对象,你调用B的这个方法,返回的A对象就可以强转成B了。B b = (B)a追问

方法里返回的是A对象,这个A对象是在方法里new出来的,我希望尽量不要动这些方法

追答

A里面的方法你可以不动啊,你只要在B里面修改就可以了。如果你new的是一个A,你不可能通过任何方法变成B的。

参考技术A A instance = new B();

这时候你调用instance的方法,返回的是A的对象,但这个对象是instanceof B的,多态性
这时候需要强制转换。为什么说java中父类不能强制转换为子类,怎么不能转换?追问

我说错了,您这种方式的确可以上溯,但是方法里返回的A对象,是在方法里new 出来的,我希望尽量不要动这些方法。

追答

明白你意思了,但完全不改代码的话,没法实现这种需求。
你要可扩展的话,一定要改代码,要么用工厂模式设计,要么就仿spring做配置文件,然后反射注入。

参考技术B class A extends B

B b=A a;
好像是这样,父类可以实现对子类中覆写方法的使用
参考技术C 你可以反过来
以a为子类、B为父类。。追问

这样扩展性不够好,以后可能还会出现一个C……

参考技术D class A
public A am()
System.out.println("am");
return this;


class B extends A
public void bm()
System.out.println("bm");



class C
public void main()
B b = new B();
B b1 = (B) b.am();
b1.bm();

以上是关于java中可以将父类对象强制转换为子类对象吗?直接将父类对象强制转换为子类对象,与将上转型对象强制的主要内容,如果未能解决你的问题,请参考以下文章

父类对象是不是可以强制转换成子类的对象?为啥?

java 里 可以把一个父类强制转换成一个子类 不能把一个子类强制转换成一个父类? 对吗?

java 多态二

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

面对对象-多态

java中怎样做可以把父类强制转换成子类