Java 中的动态绑定。使用 Parent 作为类型和 Child 作为对象有什么好处和缺点?

Dynamic binding in Java. What are benefits and drawbacks of using Parent as a type and Child as an object?

我在 Java 中阅读了几篇关于静态和动态绑定技术的文章。

我的问题是

之间的实际区别是什么
Parent a = new Parent();

Parent a = new Child();

?

如果您不想要 Child 对象,则第二种方法没有意义。

第二种方法仅在您需要子对象但可以灵活地将 Child 对象替换为 Child2 或扩展 Parent 的其他 Child 对象的情况下才有意义稍后透明对象。

其中一个非常常用的示例是 ListArrayListLinkedList。如果您想 return 列表对象类型,但可以灵活地在您的实现中用 LinkedList 替换 ArrayList(或)用 ArrayList 替换 LinkedList,那么您可以编写如下代码:

List someRefer = new ArrayList();

在某些时候,如果您的实现需要大量 inserts/deletes 到 List,然后您意识到 LinkedList 是这种情况下的最佳数据结构,那么您可以灵活地将代码更改为:

List someRefer = new LinkedList();

当您创建子对象时,子对象和父对象有共同的方法假设显示()。

Parent a = new Child();
a.display(); 

它调用运行时子 class 方法而不是父 class 方法。

编辑:

public class Parent {

    public void display() {

        System.out.println("Parent-----Display");

    }
}


public class Child extends Parent{

    public void display() {
        System.out.println("This is child method.");
    }

    public static void main(String[] args) {
        Parent parent=new Child();
        parent.display();
    }
}

输出:

This is child method.

在将子对象分配给父对象的第二种情况下,您允许子对象充当父对象,以便它可以与其他父对象进行交互。实际上,它仍然是一个拥有自己的字段和方法(无论是否被覆盖)的子对象,但现在您可以像使用父对象一样使用它。将其放入父级数组中,与另一个父级进行比较等

创建的情况也称为 runtime polymorphism,这意味着 Jvm 将决定在 runtime.For ex

访问哪些 class 成员
class Parent {
    public void disp() {
        System.out.println("Parent");
    }
}
public class Child extends Parent {
    public void disp() {
        System.out.println("Child");
    }
    public static void main(String args[]) {
        Parent p = new Parent();
        Parent p1 = new Child();
        p.disp();

        p1.disp();

    }
}

输出

Parent
Child

意味着jvm调用指定对象的方法type.When你使用的对象类型是Child它调用子方法,当你调用Parent时它使用Parent方法。