第一章java中的超级关键字


superjava中的关键字用于引用直接超类的对象,它与java中的继承有关。

假设您在and中有一个同名的实例变量或方法。subclass``superclass

JVM如何知道你指的是哪一个;超类还是子类? 这就是你可以使用super关键字来引用超类的变量、方法或构造函数的地方。

让我们借助示例来理解这一点。

superjava中的关键字可以在三个级别上使用。

在变量级别使用 super

我们可以使用以下方法引用超类的变量:super.variableName 让我们借助示例来看看。

  1. Person 类有name变量。
  2. Employee 类也有相同的name变量。

您可以使用super.name引用Person 的类名称变量,没有其他方法可以访问子类中的名称变量。

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

img

如您所见,我们习惯于从Employee 类的方法中super.name打印name变量。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关键字可用于调用父类的方法。[在方法覆盖](https://java2blog.com/method-overriding-in-java/)的情况下,可以用来专门调用父类的方法。 让我们借助示例来看看: 我们在和类中有printName()方法,我们将调用 Person 的方法。PersonEmployeesuper.printName()``printName()

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();
    }
}

输出:

Calling Person constructor
Calling Employee class constructor
Printing default name from person class : Default
Printing name from Employee class : Martin

如您所见,我们没有使用superwith printNameSuperClass(),它执行成功。

这就是java中的super关键字


原文链接:https://codingdict.com/