锁定老帖子 主题:关于java的构造方法
精华帖 (0) :: 良好帖 (0) :: 新手帖 (2) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2011-10-14
。。。。。。。。。一看java基础没学好。
这么简单的问题也。。。。 这不是构造方法的问题 OK? |
|
返回顶楼 | |
发表时间:2011-10-14
最后修改:2011-10-14
哈哈 我都看出来了 典型的覆盖
class B extends A { protected void p() { super.p(); System.out.println("B"); } public static void main(String[] args) { new B(); } } |
|
返回顶楼 | |
发表时间:2011-10-14
闲来逛逛看到了,下次面试这题得了
|
|
返回顶楼 | |
发表时间:2011-10-14
是啊。子类已经覆盖了父类中的方法了,访问的肯定是B中的p();
|
|
返回顶楼 | |
发表时间:2011-10-16
最后修改:2011-10-16
一个人旅行 写道 i3587616 写道 难道你不知道方法列表只有一个,p方法在B中已经没有A的了。属性还可以调的到。
你说的方法列表只有一个什么意思。 方法列表就是继承内存模型中方法列表,可以参考《深入对象模型》 |
|
返回顶楼 | |
发表时间:2011-10-17
子类重写父类的方法,当然调用子类自己的方法
动态绑定机制 |
|
返回顶楼 | |
发表时间:2011-10-17
new 一个B,不存在多态,当然是调用自己的方法
|
|
返回顶楼 | |
发表时间:2011-10-17
其实说了那么多还是和JVM的实现有关,加载任何类的时候都是先加载父类,再加载子类,结果就是父类在栈底,子类在栈顶。
调用方法或者属性的时候,都是从栈顶往栈底找,遇到第一个合适的方法或属性(这里就是B类中的P() )就就调用它,那么靠近栈底要是也有类符合的方法或属性则不会被调用。可以认为是被覆盖了。 基于栈实现的各种功能,本质都是栈底的被覆盖。this永远指向靠近栈顶的那块元素。 |
|
返回顶楼 | |
发表时间:2011-10-17
wupuyuan 写道 其实说了那么多还是和JVM的实现有关,加载任何类的时候都是先加载父类,再加载子类,结果就是父类在栈底,子类在栈顶。
调用方法或者属性的时候,都是从栈顶往栈底找,遇到第一个合适的方法或属性(这里就是B类中的P() )就就调用它,那么靠近栈底要是也有类符合的方法或属性则不会被调用。可以认为是被覆盖了。 基于栈实现的各种功能,本质都是栈底的被覆盖。this永远指向靠近栈顶的那块元素。 你看这位兄台多实在 |
|
返回顶楼 | |