Java对象初始化步骤&&子类继承父类后变量与方法调用情况
来源:互联网 发布:java 映射类定义方法 编辑:程序博客网 时间:2024/06/09 20:58
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处理成员变量和成员方法的继承时是有区别的。
- Java对象初始化步骤&&子类继承父类后变量与方法调用情况
- OC中继承子类对象调用方法机制 子类对象访问父类中的实例变量
- OC中继承子类对象调用方法机制 子类对象访问父类中的实例变量
- Java 继承 父类变量, 方法 与子类的关系:
- Java--子类与继承,instanceof运算符,成员变量的的隐藏,方法重写,对象的上转型对象
- JAVA final 、super 关键字以及继承关系中父类与子类实例变量初始化的 理解
- java 继承时子类父类的静态非静态成员变量,构造方法,静态代码块的初始化顺序
- 子类继承父类时,创建对象,构造方法的调用问题
- [5v]Java继承中父类与子类的初始化顺序
- Java继承中父类与子类的初始化顺序
- Java继承中父类与子类的初始化顺序
- Java在有继承情况下初始化函数的调用
- Java:子类调用超类方法的一种特殊情况
- java 父类子类继承 同名变量 同名方法
- Java子类与继承
- Java父类对象调用子类实体:方法重写与动态调用
- java基础:父类与子类之间变量和方法的调用
- java基础:父类与子类之间变量和方法的调用
- 汇编语言学习第八章-数据处理的两个基本问题
- tableViewCell 多选,索引,汉字排序,左滑操作
- Linux编程之线程基本编程
- 关于IDEA的省电模式
- Android中的Intent和Intent-Filter详解(二)
- Java对象初始化步骤&&子类继承父类后变量与方法调用情况
- Python Logging模块-介绍与使用
- iOS开发 ☞ UIView的alpha、hidden和opaque属性之间的关系和区别
- openldap+phpldapadmin创建ldapserver
- struct union enum
- Oracle-BPM(六)
- 每次版本更新都出现引导页
- NYOJ 119 士兵杀敌(三)[RMQ例题]【解题报告】
- Java 堆、栈、内存分析