Java super关键字怎么使用

发布时间:2022-07-13 10:26:38 作者:iii
来源:亿速云 阅读:188

Java super关键字怎么使用

在Java编程中,super关键字是一个非常重要的概念,尤其在处理继承关系时。super关键字主要用于调用父类的构造方法、访问父类的成员变量和方法。本文将详细介绍super关键字的使用方法,并通过示例代码帮助读者更好地理解其应用场景。

1. super关键字的基本概念

super关键字在Java中用于引用当前对象的父类。它可以在子类中调用父类的构造方法、访问父类的成员变量和方法。super关键字的主要作用包括:

1.1 调用父类的构造方法

在子类的构造方法中,可以使用super关键字调用父类的构造方法。需要注意的是,super调用必须是子类构造方法中的第一条语句。

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

class Child extends Parent {
    Child() {
        super(); // 调用父类的构造方法
        System.out.println("Child class constructor");
    }
}

public class Main {
    public static void main(String[] args) {
        Child child = new Child();
    }
}

输出结果:

Parent class constructor
Child class constructor

在上面的示例中,Child类的构造方法中使用了super()来调用Parent类的构造方法。super()必须是构造方法中的第一条语句,否则编译器会报错。

1.2 访问父类的成员变量

super关键字还可以用于访问父类的成员变量。当子类和父类中有同名的成员变量时,使用super关键字可以明确地访问父类的成员变量。

class Parent {
    int num = 10;
}

class Child extends Parent {
    int num = 20;

    void display() {
        System.out.println("Child class num: " + num);
        System.out.println("Parent class num: " + super.num);
    }
}

public class Main {
    public static void main(String[] args) {
        Child child = new Child();
        child.display();
    }
}

输出结果:

Child class num: 20
Parent class num: 10

在上面的示例中,Child类和Parent类都有一个名为num的成员变量。在Child类的display方法中,使用super.num访问了父类的num变量。

1.3 调用父类的方法

super关键字还可以用于调用父类的方法。当子类重写了父类的方法时,可以使用super关键字调用父类的原始方法。

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

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

public class Main {
    public static void main(String[] args) {
        Child child = new Child();
        child.display();
    }
}

输出结果:

Parent class display method
Child class display method

在上面的示例中,Child类重写了Parent类的display方法。在Child类的display方法中,使用super.display()调用了父类的display方法。

2. super关键字的使用场景

super关键字在Java中的使用场景非常广泛,尤其是在处理继承关系时。以下是super关键字的一些常见使用场景:

2.1 调用父类的构造方法

在子类的构造方法中,通常需要调用父类的构造方法来初始化父类的成员变量。super关键字可以用于显式地调用父类的构造方法。

class Parent {
    int num;

    Parent(int num) {
        this.num = num;
    }
}

class Child extends Parent {
    Child(int num) {
        super(num); // 调用父类的构造方法
    }

    void display() {
        System.out.println("num: " + num);
    }
}

public class Main {
    public static void main(String[] args) {
        Child child = new Child(10);
        child.display();
    }
}

输出结果:

num: 10

在上面的示例中,Child类的构造方法中使用了super(num)来调用Parent类的构造方法,并传递了一个参数num

2.2 访问父类的成员变量

当子类和父类中有同名的成员变量时,使用super关键字可以明确地访问父类的成员变量。

class Parent {
    String name = "Parent";
}

class Child extends Parent {
    String name = "Child";

    void display() {
        System.out.println("Child name: " + name);
        System.out.println("Parent name: " + super.name);
    }
}

public class Main {
    public static void main(String[] args) {
        Child child = new Child();
        child.display();
    }
}

输出结果:

Child name: Child
Parent name: Parent

在上面的示例中,Child类和Parent类都有一个名为name的成员变量。在Child类的display方法中,使用super.name访问了父类的name变量。

2.3 调用父类的方法

当子类重写了父类的方法时,可以使用super关键字调用父类的原始方法。

class Parent {
    void greet() {
        System.out.println("Hello from Parent");
    }
}

class Child extends Parent {
    @Override
    void greet() {
        super.greet(); // 调用父类的greet方法
        System.out.println("Hello from Child");
    }
}

public class Main {
    public static void main(String[] args) {
        Child child = new Child();
        child.greet();
    }
}

输出结果:

Hello from Parent
Hello from Child

在上面的示例中,Child类重写了Parent类的greet方法。在Child类的greet方法中,使用super.greet()调用了父类的greet方法。

3. super关键字的注意事项

在使用super关键字时,需要注意以下几点:

3.1 super调用必须是构造方法中的第一条语句

在子类的构造方法中,super调用必须是第一条语句。如果子类的构造方法中没有显式地调用super,编译器会自动插入一个无参的super()调用。

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

class Child extends Parent {
    Child() {
        // 编译器会自动插入super();
        System.out.println("Child class constructor");
    }
}

public class Main {
    public static void main(String[] args) {
        Child child = new Child();
    }
}

输出结果:

Parent class constructor
Child class constructor

在上面的示例中,Child类的构造方法中没有显式地调用super(),但编译器会自动插入一个无参的super()调用。

3.2 super不能用于静态上下文

super关键字不能用于静态上下文,因为super关键字引用的是当前对象的父类实例,而静态上下文没有实例。

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

class Child extends Parent {
    static void staticMethod() {
        // super.display(); // 编译错误:无法从静态上下文中引用super
    }
}

在上面的示例中,staticMethod是一个静态方法,尝试在静态方法中使用super.display()会导致编译错误。

3.3 super不能用于访问父类的私有成员

super关键字不能用于访问父类的私有成员,因为私有成员只能在定义它们的类中访问。

class Parent {
    private int num = 10;
}

class Child extends Parent {
    void display() {
        // System.out.println(super.num); // 编译错误:num在Parent中是私有的
    }
}

在上面的示例中,numParent类的私有成员变量,尝试在Child类中使用super.num访问会导致编译错误。

4. 总结

super关键字在Java中是一个非常重要的工具,尤其在处理继承关系时。通过super关键字,子类可以调用父类的构造方法、访问父类的成员变量和方法。在使用super关键字时,需要注意super调用必须是构造方法中的第一条语句,并且super不能用于静态上下文或访问父类的私有成员。

通过本文的介绍和示例代码,相信读者已经对super关键字的使用有了更深入的理解。在实际编程中,合理使用super关键字可以帮助我们更好地管理和维护代码的继承关系。

推荐阅读:
  1. Java中this和super关键字如何使用
  2. 怎么在Java中使用super关键字调用父类

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

java super

上一篇:Go语言中的函数怎么调用

下一篇:Page Visibility API怎么使用

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》