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

标签 java object inheritance types polymorphism

我知道,在处理 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/

相关文章:

Java 存储来自选择查询的多行

java - 如何激怒 "Application not responding"

javascript - 查找和替换数组中的对象(基于 id)

Angular2、Ionic2 :How to access an array of objects inside another array of objects in typescript?

javascript - 从另一个变量创建 JavaScript 变量名

c# - Entity Framework/code first/table-per-type inheritance——实现派生类和具体类之间的一对多关联

ruby-on-rails - rails/太阳黑子/Solr : Duplicate indexing on inherited classes

java - 如何了解 ViewPager 中页面的状态

java - 将分区扩展至多一级

c++ - 抽象类需要什么?为什么要通过其基类访问派生类方法?在 C++ 中