【问题标题】:difference of two different allocations of subclass两种不同子类分配的差异
【发布时间】:2012-04-07 16:34:29
【问题描述】:

Animal 是 Cat 类的父类。

public static void main (String[] args)
{
Animal myCat1 = new Cat;  //Allocation 1
Cat myCat2 = new Cat;    //Allocation 2
}

两个分配有什么区别??每个都是真的,不是吗?

【问题讨论】:

  • 有区别!您不能在 myCat1 引用上调用 Cat 方法,因为它声明了一个 Animal,因此只有 Animal 方法可用。对于 myCat2,Animal 和 Cat 方法都可以调用

标签: java allocation


【解决方案1】:
Animal myCat1 = new Cat();

这称为polymorphism,其中超类引用可以包含子类对象。

阅读 Java 教程:Polymorphism

【讨论】:

  • 我非常仔细地阅读了您所说的页面并掌握了代码。但是代码与多态的关系是什么?我不明白什么是多态?在页面的最后说:Java 虚拟机 (JVM) 为每个变量中引用的对象调用适当的方法。它不调用由变量类型定义的方法。这种行为被称为虚拟方法调用,并展示了 Java 中重要的多态特性的一个方面。没看懂是什么意思??你能澄清一下吗??
【解决方案2】:

这些都不是有效的。你需要()。除此之外:

  • 第一个通过其超类引用实例
  • 第二个通过它的类引用它

您可以通过任何超类引用任何对象,最高可达Object。这就是多态性。

【讨论】:

    【解决方案3】:

    回答您的问题: 没有区别——在这两种情况下,'new Cat ()' 都分配了 Cat 类的一个实例。 两者都是正确的 - myCat1 是动物(实际上是猫),而 myCat2 是猫。

    【讨论】:

      猜你喜欢
      • 2021-11-16
      • 2019-11-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-12-07
      • 1970-01-01
      • 1970-01-01
      • 2020-09-18
      相关资源
      最近更新 更多