返回

Java 超级关键字超实用秘籍,助你玩转 Java 编程

后端

Java 中超实用的 Super 指南

简介

在 Java 中,super 关键字是一个强大的工具,可让您轻松地与父类进行交互。掌握它的用法可以显著提高您的编码效率并增强代码的可读性。

1. 调用父类构造函数

super 的最常见用法之一是调用父类的构造函数。这对于确保子类对象正确初始化至关重要。在子类构造函数中使用 super 关键字即可实现,如下所示:

class Parent {
    public Parent() {
        System.out.println("Parent constructor");
    }
}

class Child extends Parent {
    public Child() {
        super();  // 调用父类构造函数
        System.out.println("Child constructor");
    }
}

输出:

Parent constructor
Child constructor

2. 访问父类属性和方法

super 还可以用于访问父类的属性和方法。这在需要覆盖或扩展父类行为时很有用。在子类中使用 super 关键字即可实现,如下所示:

class Parent {
    private int age;

    public Parent(int age) {
        this.age = age;
    }

    public int getAge() {
        return age;
    }
}

class Child extends Parent {
    public Child(int age) {
        super(age);  // 调用父类构造函数并传递参数
    }

    @Override
    public int getAge() {
        return super.getAge();  // 访问父类 getAge() 方法
    }
}

3. 创建父类引用

super 可用于创建父类的引用。这在需要处理父类对象时很有用。在子类中使用 super 关键字即可实现,如下所示:

class Parent {
    public void print() {
        System.out.println("Parent print method");
    }
}

class Child extends Parent {
    @Override
    public void print() {
        super.print();  // 调用父类 print() 方法
        System.out.println("Child print method");
    }
}

4. 在接口中使用 Super

super 也可以在接口中使用。这在需要实现父接口时很有用。在子接口中使用 super 关键字即可实现,如下所示:

interface Parent {
    void print();
}

interface Child extends Parent {
    @Override
    default void print() {
        super.print();  // 调用父接口 print() 方法
        System.out.println("Child print method");
    }
}

5. 在 Lambda 表达式中使用 Super

super 还可以用于在 Lambda 表达式中访问父类成员。这在需要在内部类中访问父类属性或方法时很有用。在 Lambda 表达式中使用 super 关键字即可实现,如下所示:

class Parent {
    private int age;

    public Parent(int age) {
        this.age = age;
    }

    public int getAge() {
        return age;
    }
}

class Child extends Parent {
    public Child(int age) {
        super(age);
    }

    public void printAge() {
        Runnable runnable = () -> {
            System.out.println(super.getAge());  // 在 Lambda 表达式中访问父类 getAge() 方法
        };

        runnable.run();
    }
}

常见问题解答

  • 问:何时应该使用 super 关键字?
    • 答:当需要调用父类构造函数、访问父类属性和方法、创建父类引用、在接口中使用父类或在 Lambda 表达式中访问父类成员时,可以使用 super 关键字。
  • 问:super 关键字可以多次使用吗?
    • 答:是的,super 关键字可以多次使用。
  • 问:在静态上下文中可以使用 super 关键字吗?
    • 答:不,super 关键字不能在静态上下文中使用。
  • 问:在抽象类中可以使用 super 关键字吗?
    • 答:是的,super 关键字可以在抽象类中使用,但仅用于调用父类构造函数。
  • 问:在匿名内部类中可以使用 super 关键字吗?
    • 答:是的,super 关键字可以在匿名内部类中使用,但仅用于调用父类构造函数或访问父类属性和方法。