For investors
股价:
5.36 美元 %For investors
股价:
5.36 美元 %认真做教育 专心促就业
昆明达内的小编给大家分享父类的构造函数在对象的生命中扮演的角色。
在创建新对象时,所有继承下来的构造函数都会被继承
这代表着每个父类都有一个构造函数(因为每个类至少都会有一个构造函数),并且每个构造函数都会在对象创建时执行。
执行new的指令是个大事件,因为他会启动构造函数的连锁反应。还有,就算是抽象的类也有构造函数。虽然你不能对抽象函数执行new操作,但是抽象函数还是父类,因此它的构造函数会在具体的子类创建实例时被执行。
在构造函数中用super调用父类的构造函数部分(注意:调用super()方法是调用父类构造函数的唯一方法)。要记得子类会根据父类的状态进行继承方法(也就是父类的实例变量)
example:
补充:如实例所示,Hippo对象IS-A Animal同时也是IS-A Object,如果需要创建Hippo,也需要创建出Animal以及Object的部分,这样的过程被称为“构造函数链(Constructor Chaining)”。
1 public class Animal {
2 public Animal(){
3 System.out.println("Maka a animal");
4 }
5 }
1 public class Hippo extends Animal{
2 public Hippo(){
3 //super();默认添加,调用父类
4 System.out.println("make a Hippo");
5 }
6 }
1 public class TestHippo {
2
3 public static void main(String[] args) {
4 // TODO Auto-generated method stub
5 System.out.println("Starting...");
6 Hippo hippo=new Hippo();
7 }
8
9 }
顺序执行
首先,该程序执行new Hippo()的动作,Hippo()的构造函数会进入堆栈最上方的的堆栈块中
Hippo()调用父类的构造函数导致Animal()的构造函数进入栈顶
Animal()调用父类的构造函数导致Object()构造函数进入栈顶
Object()执行完毕,它的堆栈快被弹出,接着继续执行Animal()
依次类推。。。
为什么子类一定要访问父类中的构造函数呢?
因为父类中的数据子类可以直接获取,所以子类随想在建立时,需要先查看父类是如何对这些数据进行初始化的,所以子类在对象初始化时,要首先访问一下父类中的构造函数
如果要访问弗雷指定的构造函数,可以通过手动定义super语句的方式进行指定调用
Plus example:
1 class Fu{
2 int x =30;
3 Fu()
4 {
6 System.out.println(x);
7 }
8 Fu(int x)
9 {
10 System.out.println(x);
11 }
12 }
13 class Zi extends Fu {
14 Zi(){
15 //seper();
16 //super(4); //指定访问父类中带有一个参数的构造函数
17 this(20);
18 System.out.println("zi ..."+x);
19 }
20 Zi(int x)
21 {
22 System.out.println("zi..."+x);
23 }
24
25 }
26 public class Single {
27 public static void main(String[] args) {
28 Zi z=new Zi();
29 //Zi z1=new Zi(3);
30 }
31 }
执行结果:
执行顺序:
先访问子类中空参数的构造函数
在执行子类构造函数时,由于隐式super()的存在,所以先执行父类的空构造函数,输出20
接下来执行this(),由于它指向的是本类中的带一个参数的构造函数,所以在执行子类中带有一个参数的System.out.println("zi..."+x)
最后执行this()下一行的System.out.println("zi..."+x)(注:其中x是继承自父类)
了解详情请登陆昆明达内IT培训官网(km.tedu.cn)!