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("回钦波,你好");
    }

       
 }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值