天天看点

黑马程序员_super 关键字

----------- android培训、java培训、java学习型技术博客、期待与您交流! ------------

super 关键字

super 关键字的中文意思是超级的,使用 super 关键字可以在子类中引用父类中的

内容。主要的使用形式有以下几种:

在子类的构造方法内部引用父类的构造方法

在子类中调用父类中的成员方法

在子类中调用父类中的成员变量

(1)引用父类构造方法

在构造子类对象时,必须调用父类的构造方法。而为了方便代码的编写,在子类的

构造方法内部会自动调用父类中默认的构造方法。但是如果父类中没有默认的构造方法时,

则必须手动进行调用。

使用 super 可以在子类的构造方法内部调用父类的构造方法。可以在子类的构造方法内部根据需要调用父类中的构造方法。

使用 super 关键字调用父类构造方法的示例代码如下:

//文件名:SuperClass.java

public class SuperClass {

public SuperClass(){}

public SuperClass(int a){}

}

//文件名:SubClass.java

public class SubClass extends SuperClass {

public SubClass(){

super(); //可省略

}

public SubClass(int a){

super(a);

}

public SubClass(String s){

super(); //可省略

}

}

在该示例代码中,SubClass 继承 SuperClass 类,在 SubClass 类的构造方法内部可以使用super 关键字调用父类 SuperClass 的构造方法,具体调用哪个构造方法没有限制,可以在子类内部根据需要进行调用,只是根据调用的构造方法不同传入适当的参数即可。

由于 SubClass 类的父类 SuperClass 内部有默认的构造方法,所以 SubClass 的构造方法内部super()的代码可以省略。

和使用 this 关键字调用构造方法一样,super 调用构造方法的代码只能出现在子类构造方法中的第一行可执行代码。这样 super 调用构造方法的代码在子类的构造方法内部则最多出现一句,且不能和 this 调用构造方法的代码一起使用。

(2)引用父类成员方法

在子类中继承了父类中的成员方法,一般可以直接通过方法名使用,但是如果在子

类中覆盖了父类的成员方法以后,如果需要在子类内部调用父类中被覆盖的成员方法时则不能直接调用了,这样就又需要使用 super 关键字了。

示例代码如下:

//文件名:SuperClass2.java

public class SuperClass2 {

public void test(){}

public void print(int a){

System.out.println("SuperClass2: " + a);

}

}

//文件名:SubClass2

public class SubClass2 extends SuperClass2 {

public void print(int a){

super.print(a);

System.out.println("SubClass2");

}

public void t(){

super.test(); //super 可省略

super.print(0); //不可省略

}

}

(3)引用父类成员变量

在子类中如果引用父类的成员变量,也可以使用“super.成员变量”来引用,只是

一般成员变量的覆盖是没有意义的,所以这个时候都可以直接使用成员变量名进行引用,所以这里的 super 都可以省略。 ----------- android培训、java培训、java学习型技术博客、期待与您交流! ------------