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

时间:2015-04-16 17:36:02

标签: java dynamic-binding

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

我的问题是

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

Parent a = new Child();

4 个答案:

答案 0 :(得分:1)

如果你不想要Child对象,那么第二种方法没有意义。

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

一个经常使用的示例案例是ListArrayListLinkedList。如果要返回List对象类型,但可以灵活地在实现中将LinkedList替换为LinkedList(或)LinkedList和ArrayList,那么您可以编写如下代码:

List someRefer = new ArrayList();

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

List someRefer = new LinkedList();

答案 1 :(得分:1)

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

答案 2 :(得分:1)

创建的情况也称为runtime polymorphism,这意味着Jvm将决定在运行时访问哪些类成员。对于前

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在指定的对象类型上调用方法。当您使用对象类型为Child时,它调用子方法,当您调用Parent时,它使用Parent方法。

答案 3 :(得分:0)

当你创建Child的对象时,Child和Parent有共同的方法假设display()。

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

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

修改

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.