super关键字

来源:互联网 发布:淘宝众筹如何推广 编辑:程序博客网 时间:2024/04/27 00:40

super关键字   

    有时你希望创建一个超类,该超类可以保持它自己实现的细节(也就是说,它保持私有的数据成员)。这种情况下,子类没有办法直接访问或初始化它自己的这些变量。既然封装是面向对象的基本属性,Java提供了该问题的解决方案是不值得奇怪的。任何时候一个子类需要引用它直接的超类,它可以用关键字super来实现。

1.使用super调用超类构造函数

class BoxWeight extends Box {
    double weight; // weight of box
    // initialize width, height, and depth using super()
    BoxWeight(double w, double h, double d, double m) {
       super(w, h, d); // call superclass constructor
       weight = m;
    }
}

    这里,BoxWeight( )调用带w、h和d参数的super( )方法。这使Box( )构造函数被调用,用w、h和d来初始化width, height, 和 depth。BoxWeight不再自己初始化这些值。它只需初始化它自己的特殊值:weight。这种方法使Box可以自由的根据需要把这些值声明成private。

2.用来访问被子类的成员隐藏的超类成员

Super的第2种形式多数是用于超类成员名被子类中同样的成员名隐藏的情况。思考下面简单的层次:
// Using super to overcome name hiding.
class A {

    int i;
}
// Create a subclass by extending class A.
class B extends A {
    int i; // this i hides the i in A
    B(int a, int b) {
      super.i = a; // i in A
      i = b; // i in B
    }
    void show() {
      System.out.println("i in superclass: " + super.i);
      System.out.println("i in subclass: " + i);
    }
}
class UseSuper {
    public static void main(String args[]) {
      B subOb = new B(1, 2);
      subOb.show();
    }
}
该程序输出如下:
i in superclass: 1
i in subclass: 2

    尽管B中的实例变量i隐藏了A中的i,使用super就可以访问超类中定义的i。你将会看到,super也可以用来调用超类中被子类隐藏的方法。