A extends B
B a = new A()
与A a = new A()B a = new A()时:
调用属性时,加入A和B中都定义了value属性;
在B中public int value = “B”;
在A中public int value = “A”;
则调用a.value 得到“B”;
调用方法时调用类A中的方法。而A a = new A()时:
属性和调用方法均是类A中的。
B a = new A()
与A a = new A()B a = new A()时:
调用属性时,加入A和B中都定义了value属性;
在B中public int value = “B”;
在A中public int value = “A”;
则调用a.value 得到“B”;
调用方法时调用类A中的方法。而A a = new A()时:
属性和调用方法均是类A中的。
解决方案 »
- SHH2整合启动tomcat报错,急求解!!!
- 在线急等:字符的转换encoding正向转换,dencoding反向转换
- 关于struts2标签的问题
- Cannot create JDBC driver of class 'COM.ibm.db2.jdbc.app.DB2Driver' for connect URL 'jdbc:db2:SB'
- 干了一年左右javaweb,想看些书籍提升下自己,不知道从何处下手,好迷茫啊,求大神指教
- 通过asix的api能捕获到接收和发送的消息吗?
- 在頁面上打開一個文件(如world.doc或者abc.pdf) 的問題 急急急,幫忙看看,解決給300分
- 如何利用jsp+hibernate将图片存储的orcale数据库中
- 高手请进,如何解析dtd文件,有实例最好不过了
- 有谁知道怎么解决 Timeout waiting for idle object(1000分求解)
- 急求!'教师教学水品评估系统'源码和需求说明文档!!!
- VSS
这里的B继承了A,B可以继承A的方法,可以重写A的方法(多态)
而对于类的方法来说,是后期绑定;
来看代码:/**
* @author bzwm
*
*/
public class TestExtends { public static void main(String args[]) { Father f = new Child();
//类的属性是前期绑定,所以这里输出“Father”;
System.out.println(f.var);
//f的类型是Father,但是,却用Child的构造方法初始化的,所以引用指向Child;
//所以执行Child的getVal()方法,所以 return this.val,就输出子类了。
System.out.println(f.getVal());
}
}class Father { String var = "Father"; String getVal() {
return var;
}
}class Child extends Father { String var = "Child"; String getVal() {
return var;
}
}
当一个对象被实例化,它的父类会先被实例化,
实例化其实是对对象的成员变量的初始化;
在对象中有个隐藏的属性super,指向它的父类的对象,还有个隐藏的属性this指向对象本身;
类的方法,在类被加载的时候被加载到了方法区,
同个类的所有对象都持有相同的方法指针,
在java中,所有的方法都是后期绑定,
即动态绑定,
如果在this中找到了调用的方法,就执行,若没有就在super中找,
如果在this中没有,进入了super,则相当于this指向了super,你将无法再访问到原来的this里的属性和方法了,
只能再向上。
类的所有实例方法,在JVM执行它的时候,
会把this和super两个属性压入方法栈中,
若在方法的局部变量中找不到变量val,即val 不是局部变量,
则就会去this对象中找,找不到了再到super中找。说的不太清楚,先看着吧。