子类重写父类的方法后,子类对象将无法直接访问父类被重写的方法
为了解决这个问题,Java中专门提供了一个super关键字来访问父类的成员,例如访问父类的成员变量、成员方法还有构造方法。具体格式如下
1、super.父类成员变量
2、super.父类成员方法
3、super(); //调用父类构造方法
public class Fu {
public int a = 10;
public int f;
public void fu() {
System.out.println("Fu.fu()");
}
public void method() {
System.out.println("Fu.method()");
}
}
public class Zi extends Fu{
public int a = 20;
public int z;
public Zi() {
super();
}
public void show() {
System.out.println(a);//访问子类
System.out.println(this.a);//访问子类
System.out.println(super.a);//访问父类
public void zi() {
System.out.println("Zi.zi()");
}
public void method() {
System.out.println("Zi.method()");
}
public void test() {
//访问子类的方法
zi();
this.zi();
//访问父类的 方法
fu();
this.fu();
super.fu();
method();//调用子类method方法
this.method();//调用子类method方法
super.method();//调用父类的method方法
}
}
public class Test01 {
public static void main(String[] args) {
Zi zi = new Zi();
//zi.show();
zi.test();
}
}
需要注意的是:
通过super调用父类构造方法的代码必须位于子类构造方法的第一行,并且只能出现一次,否则程序在编译期间就会报错。
在定义一个类时,如果没有特殊要求,当定义了有参构造的方法后,尽量在类中再显示的定义一个无参构造的方法,这样可以避免被继承时出现错误。