Java中具有不同引用类型的对象类型的优点是什么?

Java中具有不同引用类型的对象类型的优点是什么?,java,object,inheritance,types,polymorphism,Java,Object,Inheritance,Types,Polymorphism,我知道在Java中处理多态性时,对象的声明类型可能与对象类型不同。例如: Parent foo = new Child(); 我通常在声明的类型是接口时看到它,例如: Map<Integer,BigInteger> memo = new TreeMap<Integer,BigInteger>(); 那么是什么原因呢?在什么情况下,对一个对象使用不同的声明类型和实际类型是有益的?我的书说它对泛型编程很重要,但没有解释。我看到它一直在使用,但不知

我知道在Java中处理多态性时,对象的声明类型可能与对象类型不同。例如:

    Parent foo = new Child(); 
我通常在声明的类型是接口时看到它,例如:

    Map<Integer,BigInteger> memo = new TreeMap<Integer,BigInteger>();    

那么是什么原因呢?在什么情况下,对一个对象使用不同的声明类型和实际类型是有益的?我的书说它对泛型编程很重要,但没有解释。我看到它一直在使用,但不知道为什么。它甚至似乎也有自己的一些缺点

您可能有许多从父类继承的类。
foo
变量可以存储这些类中任何一个的实例,并且使用它的代码可以是通用的(也就是说,它可以在不知道使用父类的哪个特定子类的情况下工作)

使用接口类型的变量(如Map)并在其中存储对实现该接口的实例的引用也是如此

Parent foo = new Child(); 
当你后来意识到有一个更好的孩子可以使用时,优势就会显现出来。因此,在不更改任何其他代码的情况下,您可以使用更好的孩子:

Parent foo = new BetterChild(); 

BetterChild
显然应该是
Parent

的子级,从Oracle:@ScaryWombat读取,原理是一样的。当父级有多个子级重写一个或多个父级方法时,这是有意义的。您可以将不同子对象的实例放在使用父类型定义的某个集合中,当调用重写的方法时,JVM将为每个子实例适当地调用此方法。您是否介意展开“使用它的代码可以更通用”@bmcentee148如果代码仅依赖于用作变量类型的接口/超类的方法,则它可以与接口的许多不同实现或超类的子类一起工作(即使在编写可使用它们的代码时这些实现尚未开发)。谢谢,我开始明白了。
Parent foo = new BetterChild();