4.12 super关键字

如果在子类中想 使用被子类隐藏的成员变量或方法就可以使用关键字super

1.使用关键字super 调用父类的构造方法。 

子类如果想使用父类的构造方法,必须使用关键字super表示,而且super 必须是子类构造方法中是第一条语句
例: 
class Student{        
    int number;
    String name;
    Student(){ //无参数的构造方法,以防子类省略super时,出现错误
    }
    Student(int number,String name){        
        this.number=number;
        this.name=name;
        System.out.println("I am "+name+" my number is "+number);
    }
}
class UStudent extends Student{        
    boolean marry;
    UStudent(int number,String name,boolean b){        
        super(number,name);//super必须是子类构造方法中是第一条语句
        marry=b;
        System.out.println("婚否="+marry);
    }
}
public class SuperExample{        
    public static void main(String args[]){        
        UStudent zhang=new UStudent(203,"章",false);
    }
}
/*输出
I am 章 my number is 203  
婚否=false  
*/
注:如果在子类的构造方法中,没有使用关键字super调用父类的某个构造方法,那么默认的有 
super();
语句,即 调用父类的不带参数的构造方法
如果父类 定义了一个或多个构造方法那么Java不提供默认的构造方法(无参数的构造方法),因此,当父类中定义多个构造方法时, 应当包括一个不带参数的构造方法以防子类省略super时,出现错误。 

2.使用关键字super操作被隐藏的成员变量和方法 

例如:
super.x、super.play()
例:
class Sum{        
    int n;
    float f(){        
        float sum=0;
        for(int i=0;i<=n;i++)
        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 SuperExample2{        
    public static void main(String args[]){        
        Average aver = new Average();
        aver.n=100;
        float result1=aver.f();//如果不执行,则result2=0.0
        float result2=aver.g();
        System.out.println("result1="+result1);
        System.out.println("result2="+result2);
    }
}
/*输出
result1=50.5
result2=2525.0
*/

你可能感兴趣的:(java,super)