子类可以隐藏父类的变量和方法,但如果想要调用被隐藏的变量和方法,那么就需要用到super关键字了
super调用父类的构造方法
子类不继承父类的构造方法。因此子类如果想调用父类的构造方法,就必须在子类的构造方法中使用super。而且super必须是子类构造方法中的第一句
class Student{
String name;
String degree;
int age;
public Student(String name,String degree,int age) {
this.age=age;
this.degree=degree;
this.name=name;
}
public void Student() {
System.out.print("学生、" + name + " " + "年龄、" + age + " " + "学位、"
+ degree + '\n');
}
}
class Undergraduate extends Student{
String specialty;
Undergraduate(String name,String degree,int age,String specialty){
super(name, degree, age); //子类构造方法的第一句
this.specialty=specialty;
}
void show() {
System.out.println("专业"+specialty);
}
}
注:如果子类中没有明显的写出super关键字,默认有
super();
即使并不调用父类的构造方法;
注意:如果类中定义了一个或者多个构造方法,那么Java不会提供默认的构造方法。所以,若父类中定义了多个构造方法,那么因该包括一个不带参的构造方法。
student(){
}
super调用被隐藏的成员变量和方法
子类创建对象时,被隐藏的成员变量或方法也会被分配空间。这些被隐藏的内存单元必须用super调用
public class Sun{
int n;
public double f(){
double sun=0;
for( int i=0;i<=n;i++){
sum=sum+i;
}
ruturn sum;
}
}
public class Average extends Sun{
double n; //隐藏父类的n
public double f(){ //方法重写,隐藏父类的方法
double c;
super.n=(int)n //double 型的n转换成int型的n,将结果赋值给隐藏的int n
c=super.f();
return c+n;
}
}