码迷,mamicode.com
首页 > 其他好文 > 详细

对象与内存(二)

时间:2018-05-23 02:06:05      阅读:156      评论:0      收藏:0      [点我收藏+]

标签:声明   之间   覆盖   调用   public   代码   初始化   方法   默认   

当创建java对象时,程序总会先依次调用每个父类的非静态代码块、父类构造器(总是从Object开始)执行初始化,最后才调用本类的非静态代码块、构造器进行初始化。而父类构造器的调用则取决于子类的显示调用(使用super关键字调用父类构造器)或隐式调用(没有使用super或者this则默认调用父类的无参构造器)。

Person  p = new Son();(Person是son的父类,person即p的声明类型,son则为p的实际类型)

不管声明一个变量用的是什么类型,当通过这些变量调用方法时,方法的行为总是表现出他们实际类型的行为;但如果通过这些变量来访问他们所指对象的实例变量时,则这些实例变量的值总是表现出声明这些变量所用类型的行为。(如果子类重写了父类的方法,就意味着子类的方法彻底覆盖了父类的同名方法,而对于实例变量则不一样,即使在子类中定义了与父类完全同名的实例变量,这个实例变量仍然不可能覆盖父类中定义的实例变量,这就是继承成员变量和继承方法之间的差别)

当子类使用public访问修饰符修饰,而父类不使用public修饰时,才可以通过javap看到编译器将父类的public方法直接转移到子类中去(子类没有重写父类的该方法)

对象与内存(二)

标签:声明   之间   覆盖   调用   public   代码   初始化   方法   默认   

原文地址:https://www.cnblogs.com/zhlblogs/p/9074769.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!