super调用父类的构造方法
java中子类不继承父类的构造方法,但是我们需要使用到父类的构造方法时可以利用super关键字来调用父类的构造方法,super调用父类的构造方法例子如下
package test;
class Student{
int number;
String name;
Student(){
} //定义一个无参数的构造方法 (建议保留无参数的构造函数,避免利用super关键字时忘记写参数)
Student(int number,String name){
this.name = name;
this.number = number;
} // 定义一个含两个参数的构造方法 给number和name初始化
public int getNumber() {
return number;
}
public String getName() {
return name;
}
}
//建立一个继承Student的UniverStudent类
class UniverStudent extends Student{
boolean isMarriage; //没有初始化赋值 默认为false
UniverStudent(int number,String name){
super(number,name); //调用父类的构造方法初始化number和name
}
public boolean getIsMarriage() {
return isMarriage;
}
}
public class Super {
public static void main(String args[]) {
//建立一个对象 a
UniverStudent a = new UniverStudent(2017217954,"leechoy") ;
int number = a.getNumber();
String name = a.getName();
boolean marriage = a.getIsMarriage();
System.out.print(name+"的学号是:"+number);
if(marriage==true) {
System.out.println("已婚!");
}
else
System.out.println("未婚!");
}
}
运行结果:
leechoy的学号是:2017217954未婚!
super调用隐藏的变量和方法
java中创建一个对象时,除了声明的成员变量和继承的成员变量给分配内存外,被隐藏的成员变量也要分配内存,但该内存不属于任何一个对象,这些内存必须用super调用,调用时利用点操作.来调用变量和方法例子如下:
class Sum{
int n;
double f() {
double sum = 0;
for(int i =1;i<=n;i++)
sum+= i;
return sum;
}
}
class Average extends Sum{
double n;
//重写父类中的f()方法 使继承的父类的f()方法被隐藏
public double f() {
double c;
super.n = (int)n; //利用super给隐藏掉的父类的 n变量赋值
c = super.f(); //调用被隐藏的f()方法
return c+n;
}
double g() {
double c ;
c = super.f(); //调用被隐藏的f()方法
return c-n;
}
}
public class Super{
public static void main(String args[]) {
Average a = new Average();
a.n = 100.5678;
double result1 = a.f();
double result2 = a.g();
System.out.println("result1 = "+result1);
System.out.println("result2 = "+result2);
}
}
运行结果:
result1 = 5150.5678
result2 = 4949.4322