继承的基本概念:
(1)Java不支持多继承,也就是说子类至多只能有一个父类。
(2)子类继承了其父类中不是私有的成员变量和成员方法,作为自己的成员变量和方法。
(3)子类中定义的成员变量和父类中定义的成员变量相同时,则父类中的成员变量不能被继承。
(4)子类中定义的成员方法,并且这个方法的名字返回类型,以及参数个数和类型与父类的某个成员方法完全相同,则父类的成员方法不能被继承。
 
分析以上程序示例,主要疑惑点是“子类继承父类的成员变量,父类对象是否会实例化(不会 只有new才会实例化)?私有成员变量是否会被继承?被继承的成员变量在哪里分配空间?”
 
1:虚拟机加载ExtendsDemo类,提取类型信息到方法区。
2:通过保存在方法区的字节码,虚拟机开始执行main方法,main方法入栈。
3:执行main方法的第一条指令,new Student(); 这句话就是给Student实例对象分配堆空间。因为Student继承Person父类,所以,虚拟机首先加载Person类到方法区,并在堆中为父类成员变量在子类空间中初始化。然后加载Student类到方法区,为Student类的成员变量分配空间并初始化默认值。将Student类的实例对象地址赋值给引用变量s。
4:接下来两条语句为成员变量赋值,由于name跟age是从父类继承而来,会被保存在子类对象中(见图中堆中在子类实例对象中为父类成员变量分配了空间并保存了父类的引用,并没有实例化父类。),所以就根据引用变量s持有的引用找到堆中的对象(子类对象),然后给name跟age赋值。
4:调用say()方法,通过引用变量s持有的引用找到堆中的实例对象,通过实例对象持有的本类在方法区的引用,找到本类的类型信息,定位到say()方法。say()方法入栈。开始执行say()方法中的字节码。
5:say()方法执行完毕,say方法出栈,程序回到main方法,main方法执行完毕出栈,主线程消亡,虚拟机实例消亡,程序结束。
总结:相同的方法会被重写,变量没有重写之说,如果子类声明了跟父类一样的变量,那意味着子类将有两个相同名称的变量。父类的private变量,也会被继承并且初始化在子类父对象中,只不过对外不可见。
super关键字在java中的作用是使被屏蔽的成员变量或者成员方法变为可见,或者说用来引用被屏蔽的成员变量或成员方法,super只是记录在对象内部的父类特征(属性和方法)的一个引用。啥叫被屏蔽的成员变量或成员方法?就是被子类重写了的方法和定义了跟父类相同的成员变量,由于不能被继承,所以就称作被屏蔽。
说到这里,上面提出的疑惑也就解开了。

最新文章

  1. STM32C8T6 JTAG使用到PB3|PB4|PA13|PA14|PB15端口做普通IO时,需禁止JTAG!
  2. 寻找数组中第K频繁的元素
  3. ios开发FMDB导入SQLCipher加密数据库
  4. 【转】Swift开源项目精选
  5. java面试笔试试题http://www.jobui.com/mianshiti/it/java/6827/
  6. PHP常用魔术方法(__call魔术方法:)
  7. UVALive 3635 Pie 切糕大师 二分
  8. C++_基础_类和对象3
  9. J.U.C JMM. pipeline.指令重排序,happen-before(续)
  10. 使用MBROSTool 工具制作本地硬盘F3救急模式的方法总结
  11. node 模块化思想中index.js的重要性
  12. 第十七单元 Samba服务
  13. [cloud][sdn] ananta load balancer
  14. 使用 kbmmw 的ORM开发纯REST数据库访问服务
  15. win7 LR11.0 启动controller报:Failed to create Online:无效指针
  16. Java第一次实验 20145104张家明
  17. stenciljs 学习三 组件生命周期
  18. Java8 新特性Stream 的学习和使用方法
  19. postman设置环境变量,字段值经过json转换后数值字节长度超过上限的问题
  20. C#如何用OpenFileDialog控件打开图片显示到PictureBox这个控件

热门文章

  1. Xpath语法与lxml库
  2. 5.terms搜索多个值以及多值搜索结果优化
  3. CVE-2014-6271 漏洞告警
  4. Pycharm 的基本操作
  5. [luoguP1197] [JSOI2008]星球大战(并查集)
  6. 数字统计(2010年NOIP全国联赛普及组)
  7. Tween公式
  8. 【转】Maven的安装与使用(ubuntu)
  9. Java Json格式的字符串转变对象
  10. 开源 java CMS - FreeCMS2.2 工作流管理