Java super关键字
介绍
在Java中,super关键字是一个非常重要的关键字,它主要用于在子类中访问父类的成员变量和方法。本文将详细介绍Java中super关键字的用法、作用和示例代码。
super关键字的用途
在面向对象的编程中,继承是一种重要的概念。子类可以继承父类的属性和方法,通过super关键字,子类可以访问父类的成员变量和方法。使用super关键字可以实现以下功能:
- 子类调用父类的构造方法:在子类的构造方法中使用super关键字来调用父类的构造方法,以便对父类的属性进行初始化。
- 子类访问父类的成员变量和方法:通过super关键字可以访问父类中被隐藏的成员变量或方法。
- 子类重写父类方法时的调用:当子类重写了父类的方法,如果想在子类中调用父类的方法,可以使用super关键字。
super关键字的用法
在构造方法中调用父类构造方法
在子类的构造方法中,通过使用super关键字可以调用父类的构造方法。使用super关键字调用父类构造方法的一般形式如下:
super();
在调用父类构造方法时,需要注意一下几点:
1. super关键字必须是子类构造方法中的第一条语句;
2. 如果子类的构造方法没有显式调用父类的构造方法,编译器会自动添加super()
调用。
我们来看一个示例,演示在构造方法中通过super关键字调用父类的构造方法:
class Animal {
private String name;
public Animal(String name) {
this.name = name;
}
public void eat() {
System.out.println("Animal " + name + " is eating.");
}
}
class Dog extends Animal {
public Dog(String name) {
super(name);
}
public void bark() {
System.out.println("Dog is barking.");
}
}
public class Main {
public static void main(String[] args) {
Dog dog = new Dog("Tom");
dog.eat(); // 调用父类的eat方法
dog.bark();
}
}
输出为:
Animal Tom is eating.
Dog is barking.
访问父类的成员变量和方法
通过super关键字,子类可以访问父类中声明的成员变量和成员方法。当子类和父类存在同名的成员变量或成员方法时,使用super关键字可以访问父类的成员。使用super关键字访问父类的成员变量和成员方法的一般形式如下:
super.成员变量
super.成员方法
我们来看一个示例,演示通过super关键字访问父类的成员变量和成员方法:
class Animal {
protected String name;
public Animal(String name) {
this.name = name;
}
public void eat() {
System.out.println("Animal " + name + " is eating.");
}
}
class Dog extends Animal {
private int age;
public Dog(String name, int age) {
super(name);
this.age = age;
}
public void printInfo() {
System.out.println("Dog name: " + super.name);
super.eat();
System.out.println("Dog age: " + this.age);
}
}
public class Main {
public static void main(String[] args) {
Dog dog = new Dog("Tom", 3);
dog.printInfo();
}
}
输出为:
Dog name: Tom
Animal Tom is eating.
Dog age: 3
子类重写父类方法时的调用
当子类重写了父类的方法,如果想在子类中调用父类的方法,可以使用super关键字。使用super关键字调用父类被重写的方法的一般形式如下:
super.重写方法名(参数列表)
我们来看一个示例,演示子类重写父类方法并通过super关键字调用父类方法:
class Animal {
protected String name;
public Animal(String name) {
this.name = name;
}
public void eat() {
System.out.println("Animal " + name + " is eating.");
}
}
class Dog extends Animal {
public Dog(String name) {
super(name);
}
@Override
public void eat() {
super.eat();
System.out.println("Dog is eating biscuits.");
}
}
public class Main {
public static void main(String[] args) {
Dog dog = new Dog("Tom");
dog.eat();
}
}
输出为:
Animal Tom is eating.
Dog is eating biscuits.
小结
super关键字是Java中一个重要的关键字,通过super关键字,子类可以访问父类的成员变量和方法,调用父类的构造方法,以及在子类中调用父类的重写方法。掌握super关键字的用法和作用,对于设计合理的面向对象程序具有重要意义。
在本文中,我详细介绍了在构造方法中调用父类构造方法、访问父类的成员变量和方法、子类重写父类方法时的调用等super关键字的用法,并给出了相应的示例代码和运行结果。