superjava中的关键字用于引用直接超类的对象,它与java中的继承有关。
super
假设您在and中有一个同名的实例变量或方法。subclass``superclass
subclass``superclass
JVM如何知道你指的是哪一个;超类还是子类? 这就是你可以使用super关键字来引用超类的变量、方法或构造函数的地方。
让我们借助示例来理解这一点。
superjava中的关键字可以在三个级别上使用。
我们可以使用以下方法引用超类的变量:super.variableName 让我们借助示例来看看。
super.variableName
name
您可以使用super.name引用Person 的类名称变量,没有其他方法可以访问子类中的名称变量。
super.name
package org.arpit.java2blog; public class Person { String name; public Person() { System.out.println("Calling Person constructor"); name = "Default"; } } class Employee extends Person { String name; int age; public Employee() { System.out.println("Calling Employee class constructor"); this.name = "Martin"; } public void workOnAssignment() { // Working on assignment } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public void printName() { System.out.println("Printing default name from person class : " + super.name); } public static void main(String args[]) { Employee e1 = new Employee(); e1.printName(); } }
当你运行上面的程序时,你会得到下面的输出:
Calling Person constructor Calling Employee class constructor Printing default name from person class : Default
如您所见,我们习惯于从Employee 类的方法中super.name打印name变量。Person class``printName()
Person class``printName()
super关键字可用于调用直接父类的构造函数。
💡 重点 请注意,这super应该是子类构造函数中的第一条语句。
💡 重点
请注意,这super应该是子类构造函数中的第一条语句。
让我们借助示例来看看:
package org.arpit.java2blog; public class Person { String name; public Person(String name) { this.name=name; System.out.println("Calling Person Parameterized constructor"); } } class Employee extends Person{ int age; public Employee(String name) { super(name); System.out.println("Calling Employee class constructor"); } public void workOnAssignment() { // Working on assignment } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public static void main(String args[]) { Employee e1=new Employee("John"); System.out.println("Employee's name:"+e1.getName()); } }
Calling Person Parameterized constructor Calling Employee class constructor Employee’s name:John
如您所见,我们使用super关键字从员工类调用 Person 构造函数。
💡你知道吗? 当您使用 显式调用参数化构造函数时super(paramerters),编译器不会调用 Parent 类的无参数构造函数。
💡你知道吗?
当您使用 显式调用参数化构造函数时super(paramerters),编译器不会调用 Parent 类的无参数构造函数。
super(paramerters)
super关键字可用于调用父类的方法。[在方法覆盖](https://java2blog.com/method-overriding-in-java/)的情况下,可以用来专门调用父类的方法。 让我们借助示例来看看: 我们在和类中有printName()方法,我们将调用 Person 的方法。PersonEmployeesuper.printName()``printName()
关键字可用于调用父类的方法。[在方法覆盖](https://java2blog.com/method-overriding-in-java/)的情况下,可以用来专门调用父类的方法。 让我们借助示例来看看: 我们在和类中有
方法,我们将调用 Person 的方法。
Employee
package org.arpit.java2blog; public class Person { String name; public Person() { System.out.println("Calling Person constructor"); name="Default"; } public void printName() { System.out.println("Printing default name from person class : "+this.name); } } class Employee extends Person{ String name; int age; public Employee() { System.out.println("Calling Employee class constructor"); this.name="Martin"; } public void workOnAssignment() { // Working on assignment } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public void printName() { super.printName(); System.out.println("Printing name from Employee class : "+this.name); } public static void main(String args[]) { Employee e1=new Employee(); e1.printName(); } }
Calling Person constructor Calling Employee class constructor Printing default name from person class : Default Printing name from Employee class : Martin
如您所见,我们使用 super 关键字从 Employee 类中调用了 Person 类方法。
如果子类没有与超类相同的方法名怎么办? 如果方法名称super与. 让我们借助示例来看看。subclass``superclass
package org.arpit.java2blog; public class Person { String name; public Person() { System.out.println("Calling Person constructor"); name="Default"; } public void printNameSuperClass() { System.out.println("Printing default name from person class : "+this.name); } } class Employee extends Person{ String name; int age; public Employee() { System.out.println("Calling Employee class constructor"); this.name="Martin"; } public void workOnAssignment() { // Working on assignment } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public void printName() { printNameSuperClass(); System.out.println("Printing name from Employee class : "+this.name); } public static void main(String args[]) { Employee e1=new Employee(); e1.printName(); } }
输出:
如您所见,我们没有使用superwith printNameSuperClass(),它执行成功。
printNameSuperClass()
这就是java中的super关键字
原文链接:https://codingdict.com/