上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人
2.2.4 super关键字
当对父类实施成员覆盖以后,如果仍然需要使用父类的同名方法怎么办?这就要使用super关键字。super表示当前对象的直接父类对象。super的使用方法有以下三种:
(1)用来访问直接父类中被隐藏的数据成员。其使用形式如下:
super.数据成员
(2)用来访问直接父类中被重写的成员方法。其使用形式如下:
super.成员方法
(3)用来调用直接父类的构造方法。其使用形式如下:
super ([参数列表])
特别提示:
如果父类的构造方法为有参构造方法,则子类的构造方法中必须用super ([参数列表])给父类传参。
【例2-7】 在子类B中定义了与父类同名的属性z和方法display(),从而隐藏了父类同名成员,但在子类中又要求能调用到父类的方法和属性。
// 父类A class A { int x, y; int z = 100; public A(int x,int y){ // 构造方法 this.x = x; this.y = y; } public void display() { System.out.println("In class A: x= " + x + " , y= " + y); } } // 子类B,继承于父类A class B extends A { int a, b; int z=200; // 在子类中定义与父类同名变量z public B(int x,int y,int a,int b){ // 构造方法 super(x,y); // 调用父类的构造方法,必须是子类构造方法的第一个可执行语句 this.a = a; this.b = b; } public void display(){ // 重写父类的display()方法 super.display(); // 调用父类中被重写的方法 System.out.println("In class B: a= " + a + " , b= " + b); System.out.println("Subclass B:"+z); // 直接输出为子类变量 System.out.println("Superclass A:"+super.z); // 访问父类变量 } } public class SuperDemo { public static void main(String[] args) { B a = new B(1, 2, 3, 4); a.display(); } }
该程序的运行结果如下:
In class A: x= 1 , y= 2 In class B: a= 3 , b= 4 Subclass B: 200 Superclass A: 100