1.对象创建步骤: (1)当一个对象被创建之后,虚拟机会为其分配内存,主要用来存放对象的实例变量及其从超类继承过来的实例变量(即使这些从超类继承过来的实例变量有可能被隐藏也会被分配空间)。在为这些实例变量分配内存的同时,这些实例变量也会被赋予默认值int。 (2)在内存分配完成之后,Java的虚拟机就会开始对新创建的对象执行初始化操作,因为java规范要求在一个对象的引用可见之前需要对其进行初始化。在Java中,三种执行对象初始化的结构,分别是实例初始化器、实例变量初始化器以及构造函数。 (3)初始化对象,给实例变量赋予正确的初始值。 (4)调用构造方法。 参考: java对象创建过程/初始化顺序:http://blog.csdn.net/shanliangliuxing/article/details/12752857 2.子类继承父类后变量与方法调用情况: (1)当通过这些变量调用方法时,方法的行为总是表现出他们的实际类型的行为, (2)如果通过这些变量来访问他们所指向对象的实例变量的时候,这些实例变量的值总是表现出声明这些变量所用类型的行为。 实例:(转自:http://www./kf/201110/109053.html) 继承成员变量和成员方法的区别 java中队成员变量的继承和成员方法的继承是不同的(不同点见上方 2.)。 例如: 父类代码如下: public class Base { int count = 2 ; public void display(){ System.out.println(this.count); } } 子类代码如下: public class Derived extends Base { int count = 20 ; @Override public void display(){ System.out.println(this.count); } } 测试用例如下: public class Test { public static void main(String[] args) { Base b = new Base() ; System.out.println(b.count); b.display() ; System.out.println("-----------------"); Derived d = new Derived() ; System.out.println(d.count); d.display() ; System.out.println("-----------------"); Base bd = new Derived() ; System.out.println(bd.count); bd.display() ; System.out.println("-----------------"); Base d2b = d ; System.out.println(d2b.count); } } 程序运行结果为: 2 2 ----------------- 20 20 ----------------- 2 20 ----------------- 2 在上面的程序中,不管是d变量、还是bd变量、还是都d2b变量。只要他们指向一个Derived对象,则不管他们声明时用了什么类型,当通过 这些变量调用方法时,方法的行为总是表现出他们的实际类型的行为,但是如果通过这些变量来访问他们所指向对象的实例变量的时候, 这些实例变量的值总是表现出声明这些变量所用类型的行为。由此可见,java处理成员变量和成员方法的继承时是有区别的
|
|