当前位置: 首页 > 面试题库 >

为什么Java中允许使用不同类型的对象引用?

颜阳炎
2023-03-14
问题内容

我想知道为什么允许它具有不同类型的对象引用?例如;

Animal cow = new Cow();

您能否举一个使用不同类型的对象引用有用的示例?

编辑:Cow extends Animal


问题答案:

这是多态性和抽象的核心。例如,这意味着我可以写:

public void handleData(InputStream input) {
    ...
}

…并处理 任何
类型的输入流,无论是来自文件,网络,内存中的输入流。还是同样地,如果您有一个List<String>,则可以不考虑其实现而要求其元素0。

将子类的实例视为超类的实例的能力称为Liskov的替代原理。它允许松散耦合和代码重用。

另请阅读Java教程的Polymorphism部分以获取更多信息。



 类似资料:
  • 问题内容: ArrayList仅接受引用类型作为其元素,而不接受原始数据类型。尝试这样做时会产生编译时错误。 这背后的概念是什么?似乎是一个限制,不是吗? 问题答案: Java的所有收集类都存储它们收集的对象的内存位置。基本值不 适合 同一定义。 为避免此问题,JDK5及更高版本具有 自动装箱功能 -其中,将原语转换为适当的对象,然后在添加或从集合中读取原语时将其转换回原样。请参阅有关此主题的官方

  • 问题内容: 我想理解为什么做出这个决定。通用异常有什么问题? (据我所知,泛型只是编译时的语法糖,Object无论如何它们都将转换为.class文件,因此有效地声明泛型类就好像其中的所有内容都是Object。。如果我错了,请更正我) 问题答案: 正如标记所说,类型是不可更改的,在以下情况下会出现问题: 两者和都被擦除为相同类型,JVM无法区分异常实例,因此也无法确定应执行哪个块。

  • 问题内容: 作为实验,我尝试扩展-array,如下所示: 在类本身中添加一些与排序,交换,子数组构建等有关的方法。但是我在编译时遇到了这个错误: 我很好奇:为什么Java不允许扩展数组? 问题答案: 扩展基本类型(例如a 或数组)会打开安全漏洞。如果Java允许您扩展数组,则采用数组的方法将变得不安全。这就是字符串为,而数组根本不能扩展的原因。 例如,您可以重写该方法,并返回不正确大小的数组。这有

  • 问题内容: 我正在向我的朋友解释OOP。我无法回答这个问题。(我有多可耻? 我只是想逃避,因为OOP描绘了现实世界。在现实世界中,父母可以容纳孩子,但孩子不能容纳父母。OOP也是如此。我知道它很愚蠢。:P 为什么此陈述无效? 因为aChild的成员是aParent成员的超集。那为什么孩子不能容纳父母。 问题答案: 正是因为aChild是aParent功能的超集。你可以写: 因为每只狐狸都是动物。但

  • 问题内容: 以下程序本身并不重要。它只使用类Counter内部的静态字段,通过使用for循环来计算创建的对象数,如下所示。 唯一的问题是,注释的for循环的含义与上述for循环的含义相同(同一事实也适用于while循环)根本不起作用,从而导致指示“ 不是语句 ” 的编译时错误。意味着在这种特殊情况下,即使for循环仅包含一个语句,一对括号也是必须的!为什么? 问题答案: 要了解为什么会发生这种情况

  • 当重写超类的方法时,Java 允许返回类型是协变的。 为什么在覆盖方法时不允许相反的逆变参数类型?