当前位置: 代码迷 >> Web前端 >> super不能用在static步骤面[回钦波之super用法]
  详细解决方案

super不能用在static步骤面[回钦波之super用法]

热度:118   发布时间:2012-11-10 10:48:50.0
super不能用在static方法面[回钦波之super用法]

例1: supper不用在static 方法是可用的:


super关键字用法详解:

子类可以继承父类当中的非私有成员变量和成员方法(不是以private关键字修饰的)作为自己的成员变量和成员方法,但是,如果子类中声明的成员变量与父类的成员变量同名,则子类不能继承父类当中的成员变量。如果子类中声明的成员方法与父类的成员方法同名,并且方法的返回值及参数个数与类型也相同,则子类不能继承父类的成员方法,此时称子类的成员方法覆盖了父类的成员方法。这时,如果想在子类中访问父类中被子类隐藏的成员方法或变量时,就可以使用super关键字。

super关键字主要有以下两种用途:

1.?????? 调用父类的构造方法:子类可以调用由父类声明的构造方法,但是必须在子类的构造方法中使用super关键字类调用。其具体的语法格式如下:super([参数列表])。

class Student{

??? String name;

??? int number;

??? public Student(String name,int number){

?????? this.name=name;

?????? this.number=number;

?????? System.out.println("I’m "+name+" and my number is "+number);

??? }

}

class Univer_Student extends Student{

??? boolean b;

??? Univer_Student(String name,int number,boolean b){

//???? 用super()关键字调用父类中的构造方法

//???? 如果是用不带参数的super()则调用父类中默认的构造方法

//???? 注意:如果调用的是不带参数的构造方法,在父类当中没有不带参数的构造方法则会报错

?????? super(name,number);

?????? this.b=b;

?????? System.out.println("婚否:"+b);?

??? }

}

public class Super1 {

?

??? /**

???? * @param args

???? */

??? public static void main(String[] args) {

?????? // TODO Auto-generated method stub

?????? Univer_Student zhang=new Univer_Student("zhang",987,false);

??????

?

??? }

?

}

运行结果为:

I’m zhang and my number is 987

婚否:false

注意事项:如果子类的构造方法中没有显示地使用super关键字调用父类的某个构造方法,那么默认地有:super()语句,即调用父类中不带参数的构造方法。如果父类没有提供不带参数的构造方法,就会出现错误。

?

2.?????? 操作被隐藏的成员变量和被覆盖的成员方法:如果想在子类中操作父类中被隐藏的成员变量和被覆盖的成员方法,也可以使用super关键字,具体格式如下:super.成员变量;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();//调用父类中的成员方法并赋给局部变量c

?????? return c/n;

??? }

??? float g(){

?????? float c;

?????? c=super.f();//调用父类中的成员方法并赋给局部变量c

?????? return c/2;

??? }

}

public class Super2 {

?

??? /**

???? * @param args

???? */

??? public static void main(String[] args) {

?????? // TODO Auto-generated method stub

??????? Average aver=new Average();

??????? aver.n=100;

??????? float result_1=aver.f();

??????? float result_2=aver.g();

??????? System.out.println("result_1="+result_1);

??????? System.out.println("result_2="+result_2);

??? }

?

}

运行结果为:

result_1=50.5

result_2=2525.0

?

?

?

?

例2:supper用在static 方法中报错:

?

package test;

public class TestInterface extends? String1{
?public int i = 6;
?public static final int a = 2;
?public static final int b = 3;
?static int bb;
?public TestInterface(){
??super();
?}
?public static void main(String args[]){
??
??System.err.println(a);
??System.err.println(super.i);????? //这里会报错,翻译过来就是 supper不允许放到static 方法下面
?}
? public void i(){
??bb= super.i;
??System.err.println(super.i);???? //这里不报错,这里是允许的
?}


}

?

class String1 {
??? public? int i =11;
??? public void test(){
?? ? System.err.println("回钦波,你好");
??? }

???????
?}

  相关解决方案