我在网上搜索了解Base类和派生类的概念。我有一个问题,即派生类是否包含基类或派生类的所有变量和方法,只是引用基类变量和方法。
当我从Base类扩展一个类并创建一个派生类的对象时,派生类对象是否充当包含Base类对象+自己的变量和方法的容器? Base类对象是否内联复制?当我调用超类方法super.setValues(10,20)时,是否调用超类,设置值并将这些值内联复制?
我对代码的内部工作感到困惑?有人可以解释一下吗?
由于 薇思瓦纳
答案 0 :(得分:0)
据我了解,进入最低级别,当您使用静态类型语言实例化派生类时,它将存储在内存中,父类在子类的内存中分隔。当您访问实例时,根据您检索它的类型,它将访问与实例的整个内存区域相同的内存区域或仅访问内存的基本部分区域。但是,基类方法将指向派生类,以防它们在派生类中被重写。
这不是一个好的答案,它只是在OOP环境中工作时保留在我的记忆中的方式。
在任何情况下,都有大量关于这个主题的文献可以帮助你更好地澄清OOP,而不是在SO答案中。
答案 1 :(得分:0)
当您扩展类时,派生类实际上从基类继承方法。派生类对象包含派生类和超类的所有方法和变量。但是如果重写了任何方法,则派生类对象引用重写方法。 这意味着第一优先级转到派生类。如果编译器在派生类中没有找到该方法,那么它会检查基类。
super.setValues(10,20)调用超类方法,因为你使用了super关键字。如果你在没有super关键字的情况下使用它,那么它首先检查派生类。