您的位置:首页 > 编程语言 > Java开发

Java对象初始化步骤&&子类继承父类后变量与方法调用情况

2016-04-25 16:55 1011 查看
1.对象创建步骤:

(1)当一个对象被创建之后,虚拟机会为其分配内存,主要用来存放对象的实例变量及其从超类继承过来的实例变量(即使这些从超类继承过来的实例变量有可能被隐藏也会被分配空间)。在为这些实例变量分配内存的同时,这些实例变量也会被赋予默认值int。 

(2)在内存分配完成之后,java的虚拟机就会开始对新创建的对象执行初始化操作,因为java规范要求在一个对象的引用可见之前需要对其进行初始化。在Java中,三种执行对象初始化的结构,分别是实例初始化器、实例变量初始化器以及构造函数。 

(3)初始化对象,给实例变量赋予正确的初始值。

 (4)调用构造方法。

参考: 


java对象创建过程/初始化顺序:http://blog.csdn.net/shanliangliuxing/article/details/12752857






2.子类继承父类后变量与方法调用情况:


(1)当通过这些变量调用方法时,方法的行为总是表现出他们的实际类型的行为,

(2)如果通过这些变量来访问他们所指向对象的实例变量的时候,这些实例变量的值总是表现出声明这些变量所用类型的行为。

实例:(转自:http://www.2cto.com/kf/201110/109053.html)



继承成员变量和成员方法的区别

java中队成员变量的继承和成员方法的继承是不同的。

例如:

父类代码如下:

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处理成员变量和成员方法的继承时是有区别的。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: