Java关键字 —— super 详细解释!一看就懂 有代码实例运行!

简介: 文章详细解释了Java关键字`super`的用途,包括访问父类的成员变量、调用父类的构造方法和方法,并提供了相应的代码实例。

super在父类、子类相关联的操作中经常被用到

super 是Java中的关键字,用于引用父类(超类)的成员变量、方法或构造函数。它有以下主要用途:

  1. 访问父类中的成员变量
  2. 调用父类中的构造方法
  3. 调用父类中的方法

在没有继承和被继承关系的类中,几乎不被使用

我个人喜欢将super理解为 “父类的”, “引用父类的”

1、访问父类的成员变量

使用 super 关键字可以在子类中访问父类中的成员变量。这对于在子类中有相同名字的成员变量时很有用,以便明确指定你想要访问的是父类的成员变量。

package com.sky.test;

class Parent {
    int x = 10;
}

class Child extends Parent {
    int x = 20;

    void display() {
        System.out.println(super.x); // 访问父类的x变量    10 
        System.out.println(this.x);    // 访问子类的x变量  20
    }
}

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

class Animal {
    String name = "Animal"; // 父类的成员变量

    void printName() {
        System.out.println(name); // 打印父类的成员变量
    }
}

class Dog extends Animal {
    String name = "Dog"; // 子类的成员变量

    void displayNames() {
        System.out.println(name);     // 打印子类的成员变量
        System.out.println(super.name); // 打印父类的成员变量
    }
}

public class Main {
    public static void main(String[] args) {
        Dog myDog = new Dog();
        myDog.printName();    // 输出:Animal(调用父类方法)
        myDog.displayNames(); // 输出:Dog(子类成员变量),Animal(父类成员变量)
    }
}

2、调用父类中的构造方法

在子类的构造函数中使用 super 关键字可以调用父类的构造函数。这通常用于初始化父类的成员变量或执行父类构造函数的逻辑。

经常用在下面这种情况,类中有些变量是子类继承父类的

利用super可调用父类的构造方法将其赋值

class Parent {
    int x;

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

class Child extends Parent {
    int y;

    Child(int x, int y) {
        super(x); // 调用父类构造函数  将x赋值
        this.y = y;
    }

    // @Override 不理解也没事,不带上这个注解一样能正常运行
    @Override  // java中的注解 此处的意思是表明此方法是重写过的方法
    public String toString() {   // 返回带上child的成员变量值的字符串 x和y
        return "Child{" +
                "y=" + y +
                ", x=" + x +
                '}';
    }
}

public class Main {
    public static void main(String[] args) {
        Child child = new Child(10, 20);
        System.out.println(child.toString());
    }
}

3、调用父类中的方法

使用 super 关键字可以在子类中显式调用父类的方法。这在子类重写父类的方法时特别有用,以便在子类中可以调用父类的版本。

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

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


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

目录
相关文章
|
5月前
|
Java
【Java每日一题】— —第二十二题:类名作参数进行方法调用的传递问题。
【Java每日一题】— —第二十二题:类名作参数进行方法调用的传递问题。
|
1天前
|
Java
Java关键字 —— super 与 this 详细解释!一看就懂 有代码实例运行!
本文介绍了Java中this和super关键字的用法,包括在构造方法中使用this来区分参数和成员变量、使用super调用父类构造方法和方法,以及它们在同一个方法中同时使用的场景。
6 0
Java关键字 —— super 与 this 详细解释!一看就懂 有代码实例运行!
|
1天前
|
Java
Java关键字 —— static 与 final 详细解释!一看就懂 有代码实例运行!
这篇文章详细解释了Java中static和final关键字的用法,包括它们修饰类、方法、变量和代码块时的行为,并通过代码示例展示了它们的具体应用。
7 0
Java关键字 —— static 与 final 详细解释!一看就懂 有代码实例运行!
|
4月前
|
Dart
Dart编程入门:main方法、变量、常量和注释
Dart编程入门:main方法、变量、常量和注释
|
4月前
|
存储 Java
JavaSE 面向对象程序设计初级 静态static 包package 常量final 代码块 代码实操理论内存原理详解
JavaSE 面向对象程序设计初级 静态static 包package 常量final 代码块 代码实操理论内存原理详解
29 0
|
SQL Java
Java奇技淫巧:new对象后加大括号{},最后顺便做了个小框架?
Java奇技淫巧:new对象后加大括号{},最后顺便做了个小框架?
240 0
|
Java 编译器
复习篇【类的构造方法与代码块的执行】
复习篇【类的构造方法与代码块的执行】
复习篇【类的构造方法与代码块的执行】
|
安全 Java 编译器
java泛型的用法和详细的解释
java泛型的用法和详细的解释
|
Java
Java内部类大全(含代码例子)
写在一个类里面的类就叫内部类
91 0
|
设计模式
用两个小例子来解释单例模式中的“双重锁定”
学习单例模式时,好多人都不太理解双重锁定。学完后突然想到一个很有趣的例子。
用两个小例子来解释单例模式中的“双重锁定”