首页 热点资讯 义务教育 高等教育 出国留学 考研考公

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

发布网友 发布时间:2022-04-23 13:32

我来回答

5个回答

热心网友 时间:2023-10-15 20:26

"如果使得方法返回的A对象",既然你继承了A方法,那么B也有返回A的方法,在方法里返回B对象,你调用B的这个方法,返回的A对象就可以强转成B了。B b = (B)a追问方法里返回的是A对象,这个A对象是在方法里new出来的,我希望尽量不要动这些方法

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

热心网友 时间:2023-10-15 20:27

A instance = new B();

这时候你调用instance的方法,返回的是A的对象,但这个对象是instanceof B的,多态性
这时候需要强制转换。为什么说java中父类不能强制转换为子类,怎么不能转换?追问我说错了,您这种方式的确可以上溯,但是方法里返回的A对象,是在方法里new 出来的,我希望尽量不要动这些方法。

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

热心网友 时间:2023-10-15 20:27

class A extends B{
}
B b=A a;
好像是这样,父类可以实现对子类中覆写方法的使用

热心网友 时间:2023-10-15 20:26

"如果使得方法返回的A对象",既然你继承了A方法,那么B也有返回A的方法,在方法里返回B对象,你调用B的这个方法,返回的A对象就可以强转成B了。B b = (B)a追问方法里返回的是A对象,这个A对象是在方法里new出来的,我希望尽量不要动这些方法

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

热心网友 时间:2023-10-15 20:28

你可以反过来
以a为子类、B为父类。。追问这样扩展性不够好,以后可能还会出现一个C……

热心网友 时间:2023-10-15 20:27

A instance = new B();

这时候你调用instance的方法,返回的是A的对象,但这个对象是instanceof B的,多态性
这时候需要强制转换。为什么说java中父类不能强制转换为子类,怎么不能转换?追问我说错了,您这种方式的确可以上溯,但是方法里返回的A对象,是在方法里new 出来的,我希望尽量不要动这些方法。

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

热心网友 时间:2023-10-15 20:29

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();
}
}

热心网友 时间:2023-10-15 20:27

class A extends B{
}
B b=A a;
好像是这样,父类可以实现对子类中覆写方法的使用

热心网友 时间:2023-10-15 20:28

你可以反过来
以a为子类、B为父类。。追问这样扩展性不够好,以后可能还会出现一个C……

热心网友 时间:2023-10-15 20:29

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();
}
}

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com