java继承

来源:互联网 发布:杀敌算法百度云 编辑:程序博客网 时间:2024/06/06 00:51

  接下来让我们谈一谈java特性中的继承。

  首先打个比方,父亲生了儿子,DNA比对中可以判定是否是亲生父子,但是DNA又不是完全相同的。java当中的继承,也一样,子类继承了父类,但是子类除了从父类继承来的一些特性外,还有着属于自己的“骄傲”。

 接下来让我们更深层次的讨论java中继承的实现原理。

首先我们要知道在java虚拟机中,有哪些地方用来存放什么数据的。我们在这里直说java中的堆内存与栈内存。当我们手动用new创建一个对象的时候,我们定义的名字叫做对象的引用,而等于号后面的才是我们真正想要得到的对象本体。我们在类中定义的方法或者变量点击打开链接都是根据他才能够调用。

 说到这,那么问题来了,所谓的对象引用,对象本体分别都存放在哪里呢,答案是对象引用存放在栈内存中,对象本体存放在堆内存中,此时栈内存中的对象引用就会像C语言中的指针一样指向其对应的对象本体。那么问题又来了,这又和继承有什么关系呢。

大家有没有想过,为什么子类得对象可以调用父类中相应权限的方法,这就与创建机制有关了。

原理如下:当我们创建子类的对象时,在堆内存中首先创建一个属于子类对象的对象本体,但是此时,除了子类中定义的一些相关的方法与变量之外,还会分出一个空间用来创建父类的对象,只不过父类中的private定义的方法或者变量不能够被访问到罢了。所以就可以想象子类的对象中有一个父类的对象,当然就能够调用父类当中的相关方法或者变量了。如果有人想问子类对象在创建的过程中为什么也创建了父类的对象,答案就是,当我们创建子类对象的时候,在调用子类的构造方法的同时,子类的构造方法中会默认调用父类的构造方法。如有可以探讨的 可加qq1163036505