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

时间:2014-10-01 04:34:05

标签: java object inheritance types polymorphism

我知道在处理Java中的多态时,您可以为对象提供与对象类型不同的声明类型。例如:

    Parent foo = new Child(); 

当声明的类型是如下界面时,我主要看到它:

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

我在人们的Java代码中看到了很多。当它是Child对象时,将foo声明为Parent有什么好处?我也明白,如果我们这样做,foo就不能再调用任何未在Parent中声明为abstract或定义的方法。令我困惑的是,当我们可以同时拥有声明的和实际的Child类型并且仍然作为参数传递给需要Parent参数对象的方法时,我看到了这一点。例如:

    Child fooNew = new Child();
    public void showObj(Parent o){
        System.out.println(o); }
    showObj(fooNew);

那么给出了什么?在什么情况下为对象设置不同的声明和实际类型会有什么好处?我的书说它对通用编程很重要,但没有解释。我看到它一直使用,但不知道为什么。它甚至似乎也有一些缺点。

2 个答案:

答案 0 :(得分:1)

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

Parent foo = new BetterChild(); 

BetterChild显然应该是Parent

的孩子

答案 1 :(得分:0)

您可能有许多继承自Parent类的类。 foo变量可以存储任何这些类的实例,使用它的代码可以是通用的(即它可以在不知道正在使用哪个父类的子类的情况下工作)。

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