CodeGym/Java 博客/China/Java 中的 super 关键字
作者
Lihu Zhai
Senior Software Architect at Shinetech Software Inc.

Java 中的 super 关键字

已在 China 群组中发布
个会员
super 关键字用于不同的情况。在开始这篇文章之前,我们鼓励你学习 Java 中的继承,这样理解会更透彻。

Java 中的 super 关键字是什么?

super 是一个关键字,可用于调用超类的重写方法,以及引用超类的隐藏字段。

为何使用以及何时使用 super 关键字?

Java super 关键字有三种明确的用法。
  1. 当子类也有与父类同名的数据成员时,访问父类的数据成员
  2. 调用子类中父类的默认或参数化构造方法
  3. 如果子类有重写方法,则调用子类中的父类方法
让我们借助例子来理解以上三种情况。

示例 1 — 访问父类的数据成员

示例 1 说明如何在 Car 类型的子类中访问 Vehicle 类的属性或数据成员。请确保运行下面的代码片段来更好地理解这一点。
class Vehicle {

	String name = "vehicle";
}

class Car extends Vehicle {

	String name = "car";

	public void printMyName() {

		System.out.println(name);
	}

	public void printParentName() {

		// use super keyword to access
		// parent's data member / attribute
		System.out.println(super.name);
	}

	public static void main(String[] args) {

		Car myCar = new Car();
		System.out.print("My Car's Name: ");
		myCar.printMyName();

		// printing the parent's name
		// using the super keyword
		System.out.print("My Parent Vehicle's Name: ");
		myCar.printParentName();
	}
}
输出
我的小汽车名称:小汽车 我的父类车辆的名字:车辆

示例 2 — 在子类中访问父类的构造方法

显式调用 super() 可以访问子类中父类的默认或参数化构造方法。下面是参数化构造方法的示例。父类即 Shape 类的构造方法在子类即 Triangle 类中调用(使用 super())以设置属性。运行下面的程序以测试自己的输出。
public class Shape {

	String name;

	public Shape(String n) {

		System.out.println("Shape() parameterized constructor called!");
		name = n;
	}
}

class Triangle extends Shape {

	int sides = 3;
	String color;

	public Triangle(String n, String c) {

		// The super keyword calls the parameterized
		// constructor of the parent (Shape) with
		// 'n' as a parameter
		super(n);

		System.out.println("Triangle() parameterized constructor called!");
		this.color = c;
	}

	public static void main(String[] args) {

		Triangle myTriangle = new Triangle("Triangle Alpha", "Yellow");

		System.out.println(myTriangle.name);
		System.out.println(myTriangle.color);
	}
}
输出
已调用 Shape() 参数化构造方法! 已调用 Triangle() 参数化构造方法! 三角形 Alpha 黄色
快速挑战:使用默认的构造方法重新设计上面的程序来测试你的学习成果。此外了解 super()super(arg) 的差异。

示例 3 — 在子类中访问父类的重写方法

示例 3 说明了如何访问同时在子类定义的父类的方法。下面程序中的父类 Sound 定义了一个方法 voice().。子类 Drum 也有一个同名的方法,即 voice()。这意味着方法 voice 被子类重写。运行下面的程序,了解在子类中使用父类的方法是 super 关键字是怎样必不可少。
public class Sound {

	public void voice() {
		System.out.println("Play sound!");
	}
}

class Drum extends Sound {

	public void voice() {
		System.out.println("Play drums!");
	}

	public void play() {

		// The super keyword calls the
		// voice() method of the parent
		super.voice();
		voice();
	}

	public static void main(String[] args) {

		Drum myDrum = new Drum();
		myDrum.play();
	}
}
输出
已调用 Shape() 参数化构造方法! 已调用 Triangle() 参数化构造方法! 三角形 Alpha 黄色
Java 中的 super 关键字 - 1

结论

在这篇文章结束时,我们希望你能够了解 Java 中 super 关键字的工作原理。我们鼓励你通过实践来学习编码。因为实践是学习逻辑构建的最终关键。无论何时你遇到困难,这个帖子都会欢迎你。祝学习愉快!
评论
  • 受欢迎
你必须先登录才能发表评论
此页面还没有任何评论