super关键字
程序员文章站
2022-06-07 10:44:02
` 一.用super操作被隐藏的成员变量和方法 子类一旦隐藏了继承的成员变量,那么子类创建的对象就不再拥有该变量,该变量将归关键字super所拥有,同样子类一旦隐藏了继承的方法,那么子类创建的对象就不能调用被隐藏的方法,该方法的调用由关键字super负责。下面的例一中,子类使用super访问和调用被 ......
` 一.用super操作被隐藏的成员变量和方法
子类一旦隐藏了继承的成员变量,那么子类创建的对象就不再拥有该变量,该变量将归关键字super所拥有,同样子类一旦隐藏了继承的方法,那么子类创建的对象就不能调用被隐藏的方法,该方法的调用由关键字super负责。下面的例一中,子类使用super访问和调用被子类隐藏的成员变量和方法。
例一:
package superguanjianzi; class sum { int n; float f() { float sum=0; for(int i=1;i<=n;i++){ sum=sum+i; } return sum; } } class average extends sum{ int n; float f() { float c; super.n=n; c=super.f(); return c/n; } float g() { float c; c=super.f(); return c/2; } } public class liyi { public static void main(string[] args) { average aver=new average(); aver.n=100; float resultone=aver.f(); float resulttwo=aver.g(); system.out.println("resultone="+resultone); system.out.println("resulttwo="+resulttwo); } }
运行结果如下:
resultone=50.5
resulttwo=2525.0
若将例一中的liyi类中的代码
float resultone=aver.f(); float resulttwo=aver.g();
更改次序为:
float resulttwo=aver.g(); float resultone=aver.f();
程序的输出结果为:
resultone=50.5
resulttwo=0.0
二.使用super调用父类的构造方法
当用子类的构造方法创建一个子类的对象时,子类的构造方法总是先调用父类的某个构造方法,也就是説,如果子类的构造方法没有明显的指明使用父类的哪个构造方法,子类就调用父类的不带参数的构造方法。
由于子类不继承父亲的构造方法,因此,子类在其构造方法中需使用super来调用父亲的构造方法,而且super必须是子类构造方法中的头一条语句,即如果在子类的构造方法中,没有明显地写出super关键字来调用父类的某个构造方法,那么默认的有:
super();
在下面的例子中universtudent是student的子类,universtudent子类在构造方法中使用了super关键字。
例二:
package superguanjianzi; class student{ int number; string name; student(){ } student(int number,string name){ this.number=number; this.name=name; system.out.println("我的名字是"+name+",学号是:"+number); } } class universtudent extends student{ boolean 婚否; universtudent(int number,string name,boolean b){ super(number,name); 婚否=b; system.out.println("婚否="+婚否); } } public class lier { public static void main(string[] args) { //universtudent zhang=new universtudent(9901,"何晓林",false); new universtudent(9901,"何晓林",false); } }
上一篇: Mybatis系列之实战篇(下)