OOP继承内存初始化

时间:2014-02-04 05:13:27

标签: oop inheritance

当你实例化一个继承自父类的类的对象时,构造函数在我所知道的大多数语言中调用超类构造函数,我的问题是:当调用superclasse的构造函数时会有效在内存中是该类型的对象,但我们正在创建子类的对象(在此示例中)要添加到对象的其他值,那么如何在内存中完成?是否添加到原始对象?是否将原始对象的内容复制到具有所有变量空间的新对象中?或者它是完全不同的东西?

刚出现的一个不同的问题是类变量,就像在java中一样,保存在内存中程序的数据段中?如何将类而不是对象存储在内存中?

感谢。

2 个答案:

答案 0 :(得分:0)

Classed是定义其对象的代码,因此它们位于程序的代码段中。并且所有类变量都在数据段中。

当我们创建子类的对象时,首先创建它的父对象,并为子类成员扩展它。这就是子类对象拥有其父类的所有成员的原因。

答案 1 :(得分:0)

我真的不知道引擎是如何工作的,但我知道如何在PHP中测试内存使用情况。两个脚本

class base {
    public function __construct() {

    }
}

$start_memory = memory_get_usage();
$object = new base;
echo memory_get_usage() - $start_memory;

class base {
    public function __construct() {

    }
}
class derived extends base {
    public function __construct() {

    }
}

$start_memory = memory_get_usage();
$object = new derived;
echo memory_get_usage() - $start_memory;

返回相同的值。这意味着当扩展类时,内存中只有一个实例,而不是父类+它的子元素

phpfiddles:1st script2nd script