我知道,在处理 Java 中的多态性时,可以为对象使用与对象类型不同的声明类型。例如:
Parent foo = new Child();
当声明的类型是接口(interface)时,我主要看到它,例如:
Map<Integer,BigInteger> memo = new TreeMap<Integer,BigInteger>();
我在人们的 Java 代码中经常看到这种情况。当 foo 是子对象时,将其声明为父对象有什么好处?我也明白,如果我们这样做, foo 就不能再调用任何未声明为抽象或在 Parent 中定义的方法。让我困惑的是,当我们可以同时拥有声明的类型和实际的类型 Child 并且仍然作为参数传递给需要 Parent 参数对象的方法时,我看到这是完成的。例如:
Child fooNew = new Child();
public void showObj(Parent o){
System.out.println(o); }
showObj(fooNew);
那么什么给出了?在什么情况下,为一个对象使用不同的声明类型和实际类型会有好处?我的书说它对于泛型编程很重要,但没有解释。我看到它一直被使用,但不知道为什么。它甚至似乎也有一些自己的缺点。
最佳答案
Parent foo = new Child();
当您后来意识到有一个更好的 child 可以使用时,优势就会发挥出来。因此,无需更改任何其他代码,您就可以使用更好的 child :
Parent foo = new BetterChild();
BetterChild
显然应该是 Parent
关于java - Java中具有不同引用类型的对象类型有什么优点?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26134179/