子类重写了父类的方法后,子类对象将对父类被重写的方法无法访问。这又该如何去访问呢,Java中专提供了一个super关键字来访问父类的方法或者成员变量。
- 使用super关键字调用父类的成员变量和成员方法。
语法格式:
super.成员变量
super.成员方法(参数1,参数2,…);
实例:
//父类
public class Animal {
//定义一个成员变量name
String name = "牧羊犬";
//定义一个动物跑的方法
public void run(){
System.out.println("动物地上跑...");
}
}
//Dog类继承父类Animal
public class Dog extends Animal {
String name = "哈士奇";
//重写父类的方法
public void run(){
//调用父类的run()方法
super.run();
}
//打印名字的方法
public void showName(){
System.out.println("自己的name:" + name + "|" + "父类的name:" + super.name );
}
}
//测试类
public class Test {
public static void main(String[] args) {
//实例化一个dog对象
Dog dog = new Dog();
//调用run()方法
dog.run();
//调用showName()方法
dog.showName();
}
}
输出结果:
2. 使用super关键字访问父类的构造方法。
语法格式:
super(参数1,参数2,…);
实例:
//父类Animal
public class Animal {
//定义一个成员变量name
String name;
//定义一个有参构造方法
public Animal(String name) {
this.name = name;
System.out.println(this.name);
}
}
//Dog类继承Animal
public class Dog extends Animal {
public Dog() {
//调用父类的有参构造方法
super("藏獒");
}
}
//测试类
public class Test {
public static void main(String[] args) {
//实例化一个dog对象
Dog dog = new Dog();
}
}
输出结果:
在Dog()类中的无参构造方法中通过super关键字调用父类的有参构造方法当Dog类中的构造方法被调用父类的构造方法就会被调用。需要注意的是:super关键字调用父类的构造方法的代码必须位于子类的构造方法第一行并且只能出现一次。
加油吧!!!