Java中的动态绑定。将父对象用作类型而将子对象用作对象的优点和缺点是什么?
我读了几篇关于Java中静态和动态绑定技术的文章
我的问题是,两者之间的实际区别是什么
Parent a = new Parent();
及
Parent a = new Child();
?
你可以在下面搜索框中键入要查询的问题!
我读了几篇关于Java中静态和动态绑定技术的文章
我的问题是,两者之间的实际区别是什么
Parent a = new Parent();
及
Parent a = new Child();
?
# 1 楼答案
当您创建子对象时,子对象和父对象有一个共同的方法假设display()
它调用运行时子类方法而不是父类
编辑:
输出:
# 2 楼答案
在将子对象指定给父对象的第二种情况下,允许该子对象充当父对象,以便它可以与其他父对象交互。实际上,它仍然是一个子对象,有自己的字段和方法(重写或不重写),但现在您可以像使用父对象一样使用它。将它放在一个父数组中,与另一个父数组进行比较,等等
# 3 楼答案
创建的情况也称为
runtime polymorphism
,这意味着Jvm
将决定在运行时访问哪些类成员。前输出
表示jvm调用指定对象类型上的方法。当您将对象类型用作子对象时,它将调用子方法;当您调用父对象时,它将使用父方法
# 4 楼答案
如果您不想要
Child
对象,那么第二种方法就没有意义第二种方法只有在需要子对象的情况下才有意义,但是可以灵活地将
Child
对象替换为Child2
或其他一些Child
对象,这些对象在以后透明地扩展Parent
对象一个非常常用的例子是
List
、ArrayList
、LinkedList
。如果希望返回列表对象类型,但在实现中可以灵活地将ArrayList替换为LinkedList(或将LinkedList替换为ArrayList),则可以编写如下代码:在某种程度上,如果您的实现需要大量插入/删除列表,那么您会意识到LinkedList是这种情况下的最佳数据结构,那么您可以灵活地将代码更改为: