论坛首页 Java企业应用论坛

关于java的构造方法

浏览 7602 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (2) :: 隐藏帖 (0)
作者 正文
   发表时间:2011-10-14  
。。。。。。。。。一看java基础没学好。
这么简单的问题也。。。。
这不是构造方法的问题
OK?
0 请登录后投票
   发表时间: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();
	}
}
0 请登录后投票
   发表时间:2011-10-14  
闲来逛逛看到了,下次面试这题得了
0 请登录后投票
   发表时间:2011-10-14  
是啊。子类已经覆盖了父类中的方法了,访问的肯定是B中的p();
0 请登录后投票
   发表时间:2011-10-16   最后修改:2011-10-16
一个人旅行 写道
i3587616 写道
难道你不知道方法列表只有一个,p方法在B中已经没有A的了。属性还可以调的到。

你说的方法列表只有一个什么意思。


方法列表就是继承内存模型中方法列表,可以参考《深入对象模型》
0 请登录后投票
   发表时间:2011-10-17  
子类重写父类的方法,当然调用子类自己的方法
动态绑定机制
0 请登录后投票
   发表时间:2011-10-17  
new 一个B,不存在多态,当然是调用自己的方法
0 请登录后投票
   发表时间:2011-10-17  
  其实说了那么多还是和JVM的实现有关,加载任何类的时候都是先加载父类,再加载子类,结果就是父类在栈底,子类在栈顶。
  调用方法或者属性的时候,都是从栈顶往栈底找,遇到第一个合适的方法或属性(这里就是B类中的P() )就就调用它,那么靠近栈底要是也有类符合的方法或属性则不会被调用。可以认为是被覆盖了。
  基于栈实现的各种功能,本质都是栈底的被覆盖。this永远指向靠近栈顶的那块元素。
0 请登录后投票
   发表时间:2011-10-17  
wupuyuan 写道
  其实说了那么多还是和JVM的实现有关,加载任何类的时候都是先加载父类,再加载子类,结果就是父类在栈底,子类在栈顶。
  调用方法或者属性的时候,都是从栈顶往栈底找,遇到第一个合适的方法或属性(这里就是B类中的P() )就就调用它,那么靠近栈底要是也有类符合的方法或属性则不会被调用。可以认为是被覆盖了。
  基于栈实现的各种功能,本质都是栈底的被覆盖。this永远指向靠近栈顶的那块元素。


你看这位兄台多实在
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics