黑马程序员---5、Super关键字

来源:互联网 发布:淘宝商品照片拍摄价格 编辑:程序博客网 时间:2024/05/22 08:22

Super关键字

   

       1、用super操作被隐藏的成员变量,那么子类创建的对象就不在拥有该变量,该变量将归关键字super所拥有,同样子类一旦隐藏了继承的方法,那么子类创建的对象就不能调用被隐藏的方法,该方法的调用由关键字super负责。因此,如果在子类中想使用被子类隐藏的成员变量或方法需要使用关键字super。比如super.xsuper.play()就是访问和调用被子类隐藏的成员变量x和方法play()

       下面举个例子说明,子类使用super访问和调用被子类隐藏的成员变量和方法。

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 Example2 {

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);

}

}

运行结果:

2、使用super调用父类的构造方法

     当用子类的构造方法创建一个子类的对象时,子类的构造方法总是先调用父类的某个构造方法,也就是说,如果子类的构造方法没有明显的指明使用父类的那个构造方法,子类就调用父类的不带参数的构造方法。

     由于子类不继承父类的构造方法,因此,子类在其构造方法中需使用super关键字来调用父类的构造方法,而且super必须是子类构造方法中的头一条语句,即如果在子类的构造方法中,没有明显的写出super关键字来调用父类的某个构造方法,那么默认的有:super();

举例说明:UniverStudentStudent的子类,UniverStudent子类构造方法中使用super关键字,

class Student{

int number;

String name;

Student(){

}

Student(int number,String name){

this.name=name;

this.number=number;

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 Example2_1 {

public static void main(String[] args) {

UniverStudent zhnag=new UniverStudent(1234,"张三",false);

}

}

运行结果:

      如果类里定义了一个或多个构造方法,那么java不提供默认的构造方法(不带参数的构造方法),因此,当在父类中定义多个构造方法时,应当包括一个不带参数的构造方法,以防子类省略super时出现错误。