1.既然继承是通过引用传递 那为什么子类重写父类的属性和方法不会改变父类的属性和方法呢。 那继承的引用传递指的是什么 什么情况下才会改变父类的成员方法和成员属性。
2.既然静态属性和方法和常量 在静态区 那在子类重写 为什么依然不会覆盖原来的属性和变量。
3.新编辑的问题— — — 就是关于静态区—— 大家都知道查看对象 对象里只有成员变量堆里只有成员方法的地址 成员方法和类是在代码区的 而静态成员方法和成员方法不一样 静态成员方法是在静态区 obj->静态成员变量 会报错 而obj->静态成员方法 可以成功调用。这是为什么 有人能讲一下 代码区 和静态区和对象的关系么 感激不尽!!!!!
楼上的回答,没有一个说到点子上的。自行百度:后期绑定以及前期绑定;另外看看tij关于继承和多态部分的知识
你可以试试这样理解,继承是通过引用传递,子类是继承的父类,父类的属性和方法,那么内存里面就肯定父类的全部属性和方法。
然你在子类覆盖父类的方法,其实相当于把指针从父类的a()方法移动到子类的覆盖的a()来,实际父类的a()还是存在的,并不会真的从内存里面把父类的a()方法替换掉。
继承的引用传递:是指在内存中,父类的代码只有一份,如内存地址是0x000010,当子类去继承的时候,是直接从这个内存地址去读取父类的代码。而不会重新把代码拷贝一份到内存里面来。
这个可以去看一下动态绑定机制,子类和父类会在方法区形成两张各自的方法表和各自的数据类型。。。不会覆盖
个人对继承的理解:
父类已有的方法,继承父类的子类是默认有的(方法和属性)。但是子类可以选择去重写父类的方法,这样的话,子类在调用这些被重写的方法的时候,就会优先去调用子类修改的方法,而如子类没有修改该方法的时候,就会默认调用父类的该方法。
对于楼主说的继承是引用传递,个人认为继承的时候默认这些方法和属性是指向父类的,但是在实际调用的时候,会去检测子类有没有重写父类的方法或者属性,如果有的话,实际调用就会指向子类重写的方法和属性,没有的话,依然是指向父类的方法和属性。
个人愚见...
子类是继承的父类,父类的属性和方法,子类可以继承,但是不能改变父类,子类只有一个父类,但是,父类可以有很多子类,如果子类更改了父类的属性和方法那其本身不是就需要再次继承新的方法和属性?这就无解了。。。
子类只能复写父类,代码先执行子类中的方法,不再继续执行父类被复写的该方法。
继承在php语言中只能从高到低继承,不能逆向覆盖
我继承父类的方法,相当于把父类的所有方法再我的类里面写了一遍,而和我现有的有冲突的方法,我不写进来就是了。就是说父类有内没有的就继承,父类有,你也有,就以你为准。