欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

super关键字

程序员文章站 2023-10-28 22:15:46
` 一.用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);
    }

}