---------------------- ASP.Net+Android+IO开发S、.Net培训、期待与您交流! ----------------------
1、继承:在子类的构造函数中有默认的super(),调用父类空参数的构造函数,如果要继承,如果重写父类构造函数,最好也重写父类空参构造函数,不然会报错。子类所有的构造函数都会默认调用父类的空参构造函数。如果父类没有空参构造函数,子类必须用super明确掉用父类的构造函数,super语句必须定义在子类构造函数的第一行。用this()调用本类的构造函数,super就没有了,super和this只能定义在第一行,但是子类的构造函数肯定有一个调用父类的构造函数。
2、子类实例化过程:先初始化父类变量,在初始化子类的变量,在通过super初始化父类内容时,子类的成员变量并未显示的初始化,等super()父类初始化完毕后,才进行子类的成员变量显示的初试化
图示:
class Fu
{
Fu()
{
super();
show();
return;
}
void show()
{
System.out.println("fu show");
}
}
class Zi extends Fu
{
int num = 8;
Zi()
{
super();
//-->通过super初始化父类内容时,子类的成员变量并未显示初始化。等super()父类初始化完毕后,
//才进行子类的成员变量显示初始化。
System.out.println("zi cons run...."+num);
return;
}
void show()
{
System.out.println("zi show..."+num);
}
}
class ExtendsDemo5
{
public static void main(String[] args)
{
Zi z = new Zi();
z.show();
}
}
对象的实例化过程:Person p = new person();
1. JVM会先读取指定路径下的Person.class文件,并加载进内存,并会先加载Person父类(如果有父类)
2. 在堆内存中开辟空间,分配地址
3. 在对象空间中,对对象中的属性进行默认的初始化
4. 调用对应的构造函数进行初始化
5. 在构造函数中,会先到调用父类中构造函数进行初始化
6. 父类初始化完毕后,在堆栈的属性进行显示初始化
7. 在进行子类构造函数的特定初始化
8. 初始化完毕后,将地址赋给引用变量
class Fu{
Fu(){
show();
}
void show(){
System.out.println("hahah");
}
}
class Zi extends Fu{
int num = 3;
{
System.out.println("zi" + num);
num = 4;
}
Zi(){
super();
//属性显示初始化
//构造代码块初始化
show();
}
void show(){
System.out.println("show..." + num);
}
}
图示:
---------------------- ASP.Net+Android+IO开发S、 .Net培训、期待与您交流! ----------------------