【问题标题】:Understanding the Java Base class and Derived Class [closed]了解 Java 基类和派生类 [关闭]
【发布时间】:2016-12-11 12:28:39
【问题描述】:

我在网上搜索以了解基类和派生类的概念。我有一个问题,派生类是否包含基类的所有变量和方法,或者派生类只引用基类变量和方法。

当我从基类扩展一个类并创建派生类的对象时,派生类对象是否充当包含基类对象+它自己的变量和方法的容器?基类对象是内联复制的吗?当我调用超类方法super.setValues(10,20)时,它会调用超类,设置值,并内联复制这些值吗?

我对代码的内部运作感到困惑?谁能解释一下?

【问题讨论】:

  • 在c#中比较常用的是基类和派生类,而java更像是父类和子类

标签: java inheritance


【解决方案1】:

据我了解,在最低级别,当您用静态类型语言实例化派生类时,它存储在内存中,父类与子类在内存中分隔。当您访问实例时,根据您检索它的类型,它将访问与实例的整个内存区域或仅内存的基本部分区域相同的内存区域。但是,基类方法将指向派生类,以防它们在派生类中被覆盖。

这不是一个好的答案,只是在 OOP 环境中工作时它被保留在我的记忆中。

无论如何,有大量关于该主题的文献可以帮助您比我在 SO 答案中更好地阐明 OOP。

【讨论】:

    【解决方案2】:

    当你在扩展一个类时,派生类实际上继承了基类的方法。派生类对象包含派生类和超类的所有方法和变量。但是如果任何方法被覆盖,派生类对象是指被覆盖的方法。 这意味着派生类优先。如果编译器在派生类中没有找到该方法,则它会检查基类。

    super.setValues(10,20) 调用超类方法,因为你使用了 super 关键字。如果你使用它没有 super 关键字,那么它首先检查派生类。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-05-21
      • 2016-10-17
      • 1970-01-01
      • 1970-01-01
      • 2017-11-16
      • 1970-01-01
      • 1970-01-01
      • 2023-01-26
      相关资源
      最近更新 更多