开课吧课堂之Super的第2种用法

90 阅读1分钟

上篇文章中分享了Super的第1种形式,这篇文章就主要分享Super的第2种形式,除了总是引用它所在子类的超类,它的行为有点像this。这种用法有下面的通用形式:

super.member

这里,member既可以是1个方法也可以是1个实例变量。

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也可以用来调用超类中被子类隐藏的方法。