A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 周志龙 中级黑马   /  2013-10-14 18:26  /  945 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

super关键字的两种用法:

1.用于调用超类的构造函数;

2.用于访问超类中被子类的某个成员隐藏的成员;

例:使用super调用超类的构造函数

矩形实体代码:

[java]  
public class Rectangular {  
    private double width;  
    private double height;  
      
    Rectangular(double w,double h){  
        width=w;  
        height=h;  
    }  
    public double area(){  
        return width*height;  
    }  
}  
矩形子类RectangularArea代码:
[java]
public class RectangularArea extends Rectangular{  
    public RectangularArea(double w,double h) {  
        super(w,h);  
    }  
}  
测试类DemoSuper代码:
[java]  
public class DemoSuper {  
  
    public static void main(String[] args) {  
        // TODO Auto-generated method stub  
        RectangularArea myboxBoxWeight=new RectangularArea(10, 20);  
        System.out.println("矩形的面积为:"+myboxBoxWeight.area());  
    }  
  
}  
实验结果:


由实验结果我们可知:使用super()成功的调用了父类Rectangular的构造方法,并调用了计算面积的方法area(),间接使用了父类中private成员变量。

ps:父类中的private成员变量还是不能被子类直接调用的,只是通过public方法间接使用了。

例:访问超类中被子类成员隐藏的成员

上面的这句话听起来很是绕口,所以我们通过实例来学习。

父类代码:

[java]
public class A {  
    int i;  
}  
子类代码:
[java]  
public class B extends A{  
    int i;  
    B(int a,int b){  
        super.i=a;  
        i=b;  
    }  
    void show(){  
        System.out.println("i in superclass:"+super.i);  
        System.out.println("i in subclass:"+i);  
    }  
}  
测试类DemoSuper:
[java]  
public class DemoSuper {  
  
    public static void main(String[] args) {  
        // TODO Auto-generated method stub  
        B b=new B(1,2);  
        b.show();  
    }  
  
}  
实验结果:


尽管类B中的实例变量i隐藏了类A中的实例变量i,但是使用super可以访问在超类中定义的实例变量i。当然也可以使用super调用被子类隐藏的方法。

ps:可以参见继承中的方法重写。

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马