在Java程序中super关键字主要存在于子类方法中,super用于在子类中指向父类的成员。使用super可以访问父类的属性和方法,也可以用于在子类构造方法中调用父类构造方法。
【例5.5】在BaseClass类中定义了成员变量x,定义了一个无参构造方法和一个有参构造方法,再定义一个printMessage方法。在BaseClass的子类SubClass类中定义了成员变量y,定义了一个无参构造方法和一个有参构造方法,再定义一个outputMessage方法。在子类的带参构造方法中用super(y)调用了父类带参数的构造方法,同时语句this.y=y+x中的x隐式的加了super.x,表示访问的是父类中继承过来的x成员。在子类的ouputMessage()方法中用super.printMessage()调用父类中的方法。Example5_5类是主类,实现对BaseClass类和SubClass类进行测试用。
运行结果:
super使用说明:
(1)在子类对象中通过super访问父类的成员。如:this.y=y+x;,实质是:this.y=y+super.x;,当在子类中访问继承过来的成员时会在父类成员前有一个隐式的super,如super.x。
(2)this和super很像,this指向的是当前对象的调用,super指向的是当前调用对象的父类。
在执行例5.5时,首先Example5_5主类被加载,执行main方法,用SubClass 类创建对象时,SubClass.class加载,发现其有父类BaseClass类,于是BaseClass.class类也被加载进内存。类加载完毕,创建对象,父类的带参数构造方法会被调用(如没有通过super显式调用父类构造方法,则默认执行父类无参构造方法),然后执行子类相应构造方法创建一个子类对象。在该子类对象中包含一个父类对象,该父类对象在子类对象内部。
(3)this和super关键字只能在有对象的前提下使用,不能在静态上下文使用。
(4)子类的构造函数中若没有用super显式调用父类的构造方法,则子类的构造函数默认第一行会调用父类无参的构造函数,隐式语句为:(www.daowen.com)
super();
若父类无参构造函数不存在,则编译报错。
(5)子类显式调用父类构造函数。
在子类构造函数第一行可以通过super关键字调用父类有参或无参构造函数。若使用super关键字显式调用父类构造函数,编译器自动添加的调用父类无参数的构造方法就会消失。
(6)super()和this()不能同时存在于构造函数第一行。
无论是调用父类构造方法还是当前类的其他构造方法,都只能放在构造方法中的第一行,并且只能调用一次,super()和this()不能同时存在于构造函数第一行。
super思考:若一个类没有显式的继承于某个类,则在该类中的成员函数是否可以使用super关键字?可以使用,因为该类继承于Object类,Object类是所有类的直接或间接父类。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。