Java-继承-Super
时间:2020-02-23 14:36:38 来源:igfitidea点击:
在本教程中,我们将学习Java编程语言中的super关键字。
在先前的教程中,我们了解了继承以及如何访问继承的变量和方法。
随时检查一下。
Super关键字
在两种情况下,我们使用关键字" super"。
从子类中调用父类的构造函数。
访问隐藏在子类中的父类的成员。
调用父类的构造函数
为了从子类中调用父类的构造函数,我们使用" super"关键字,然后传递参数列表(如果有)。
语法:
class Parent { //constructor Parent() { //some code... } } class Child extends Parent { //constructor Child() { super(); //some code... } }
" super()"语句必须是子构造函数中调用父构造函数的第一条语句。
例1:访问父构造函数
在下面的示例中,我们有父类" Person"和子类" Employee"。
从子类内部,我们正在调用父类的构造函数。
//the parent class class Person { //general member variables String firstname; String lastname; //constructor Person(String firstname, String lastname) { this.firstname = firstname; this.lastname = lastname; } //general method public void showName() { System.out.println("First name: " + this.firstname); System.out.println("Last name: " + this.lastname); } } //the child class inheriting the parent class class Employee extends Person { //specific member variables String employeeid; int payscale; String joiningDate; //constructor Employee(String firstname, String lastname, String employeeid, int payscale, String joiningDate) { //calling the constructor of the parent class Person //to set the first name and last name super(firstname, lastname); //now setting the member variables of this class this.employeeid = employeeid; this.payscale = payscale; this.joiningDate = joiningDate; } //show employee details public void showDetail() { System.out.println("Employee details:"); //calling the inherited method showName() //of the parent class Person //to show the first name and last name this.showName(); //now calling the method of this class this.showEmployeeDetail(); } public void showEmployeeDetail() { System.out.println("Employee ID: " + this.employeeid); System.out.println("Pay scale: " + this.payscale); System.out.println("Joining Date: " + this.joiningDate); } } //the main class public class Example { //the main method public static void main(String[] args) { //employee data String firstname = ""; String lastname = ""; String employeeid = "E01"; int payscale = 3; String joiningDate = "2010-01-01"; //creating an object of the Employee class Employee empObj = new Employee(firstname, lastname, employeeid, payscale, joiningDate); //show detail empObj.showDetail(); } }
$javac Example.java $java Example Employee details: First name: Last name: Employee ID: E01 Pay scale: 3 Joining Date: 2010-01-01
访问隐藏在子类中的父类成员
super关键字的另一种用法是访问隐藏在子类中的父类的成员。
注意!如果子类成员变量与父类成员变量具有相同的名称,则父变量将隐藏在子类中。
例:
class Parent { int x; } class Child extends Parent { int x; }
在上面的代码中,"孩子"类中的变量" x"隐藏了"父母"类中的变量" x"。
例2:访问父类成员变量
在下面的示例中,我们使用super
关键字从子类访问父类的成员变量。
//the parent class class Person { //general member variables String firstname; String lastname; //constructor Person(String firstname, String lastname) { this.firstname = firstname; this.lastname = lastname; } } //the child class inheriting the parent class class Employee extends Person { //member variable "firstname" of this class //is hiding the member variable "firstname" //of the parent class Person // //note! firstname is also present //in the Person class and is inherited //in this Employee class String firstname = "Default firstname"; //specific member variables String employeeid; int payscale; String joiningDate; //constructor Employee(String firstname, String lastname, String employeeid, int payscale, String joiningDate) { //calling the constructor of the parent class Person //to set the first name and last name super(firstname, lastname); //now setting the member variables of this class this.employeeid = employeeid; this.payscale = payscale; this.joiningDate = joiningDate; } //show employee details public void showDetail() { System.out.println("Employee details:"); //this will give us the value stored in the //firstname member variable of this class System.out.println("First name (variable of Employee class): " + this.firstname); //to get the firstname that was saved in the //parent class member variable //we have to use the super keyword System.out.println("First name (variable of Person class): " + super.firstname); //showing the last name //this was inherited from the parent class Person //but since it is not hidden in the child class //Employee so, we are using the "this" keyword //to access it System.out.println("Last name (inherited variable of Employee class): " + this.lastname); //we can also use the "super" keyword and //access the lastname variable of the Person class System.out.println("Last name (variable of Person class): " + super.lastname); //now calling the method of this class this.showEmployeeDetail(); } public void showEmployeeDetail() { System.out.println("Employee ID: " + this.employeeid); System.out.println("Pay scale: " + this.payscale); System.out.println("Joining Date: " + this.joiningDate); } } //the main class public class Example { //the main method public static void main(String[] args) { //employee data String firstname = ""; String lastname = ""; String employeeid = "E01"; int payscale = 3; String joiningDate = "2010-01-01"; //creating an object of the Employee class Employee empObj = new Employee(firstname, lastname, employeeid, payscale, joiningDate); //show detail empObj.showDetail(); } }
$javac Example.java $java Example Employee details: First name (variable of Employee class): Default firstname First name (variable of Person class): Last name (inherited variable of Employee class): Last name (variable of Person class): Employee ID: E01 Pay scale: 3 Joining Date: 2010-01-01