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
对象的情况下才有意义稍后透明对象。
其中一个非常常用的示例是 List
、ArrayList
、LinkedList
。如果您想 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方法。
我在 Java 中阅读了几篇关于静态和动态绑定技术的文章。
我的问题是
之间的实际区别是什么Parent a = new Parent();
和
Parent a = new Child();
?
如果您不想要 Child
对象,则第二种方法没有意义。
第二种方法仅在您需要子对象但可以灵活地将 Child
对象替换为 Child2
或扩展 Parent
的其他 Child
对象的情况下才有意义稍后透明对象。
其中一个非常常用的示例是 List
、ArrayList
、LinkedList
。如果您想 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 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方法。