掌握Java中的super关键字

发布于:2024-03-28 ⋅ 阅读:(15) ⋅ 点赞:(0)

super 是 Java 中的一个关键字,它在继承的上下文中特别有用。super 引用了当前对象的直接父类,它可以用来访问父类中的属性、方法和构造函数。以下是 super 的几个主要用途:

1. 调用父类的构造函数

在子类的构造函数中,你可以使用 super 来调用父类的构造函数。这通常在子类构造函数的第一行完成,以确保父类的属性被正确初始化。

class Parent {
    Parent(String name) {
        System.out.println("Parent constructor called with name: " + name);
    }
}

class Child extends Parent {
    Child(String name, int age) {
        super(name); // 调用父类的构造函数
        System.out.println("Child constructor called with age: " + age);
    }
}

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

在这个例子中,Child 类的构造函数通过 super(name) 调用了 Parent 类的构造函数,并传递了一个 name 参数。

2. 访问父类的成员

在子类中,如果你想要引用父类的属性或方法,可以使用 super 关键字。

class Parent {
    String name = "Parent";
    
    void printName() {
        System.out.println("Name in Parent: " + name);
    }
}

class Child extends Parent {
    String name = "Child";
    
    void printName() {
        super.printName(); // 调用父类的printName方法
    }
}

public class Main {
    public static void main(String[] args) {
        Child child = new Child();
        child.printName(); // 输出 "Name in Parent: Parent"
    }
}

在这个例子中,尽管 Child 类有自己的 name 属性和 printName 方法,但它通过 super.printName() 调用了父类的 printName 方法来打印父类的 name 属性。

3. 方法重写

当你在子类中重写父类的方法时,可以使用 super 来调用父类的方法。

class Parent {
    void doSomething() {
        System.out.println("Doing something in Parent class");
    }
}

class Child extends Parent {
    @Override
    void doSomething() {
        super.doSomething(); // 调用父类的doSomething方法
        System.out.println("Doing something more in Child class");
    }
}

public class Main {
    public static void main(String[] args) {
        Child child = new Child();
        child.doSomething(); // 首先调用父类的方法,然后调用子类的方法
    }
}

在这个例子中,Child 类重写了 doSomething 方法,并在方法内部首先调用了父类的 doSomething 方法。

4. 阻止继承

使用 super 关键字结合 Object 类的构造函数可以阻止其他类继承某个类。

class FinalClass extends Object {
    public FinalClass() {
        super(); // 调用Object类的构造函数
    }
}

final class TrulyFinalClass {
    // 这个类不能被继承,因为它没有构造函数,且Object类是final的
}

在这个例子中,FinalClass 可以被继承,因为它有一个可访问的构造函数。而 TrulyFinalClass 不能被继承,因为 Object 类是 final 的,且没有提供其他构造函数。


super注意点:

1.super调用父类的构造方法,必须在构造方法的第一个;
2. super必须只能出现在子类的方法或者构造方法中;
3. super和this不能同时调用构造方法。

VS this:

  代表的对象不同:
      this:本身调用这个对象
      super: 代表父类对象的应用
  前提:
      this:没有继承也可以使用
      super:只能在继承条件下才可以使用
  构造方法:
      this();本类的构造
      super();父类的构造

总结

super 是 Java 中一个非常有用的关键字,它在继承结构中提供了一种访问父类成员的方式。正确使用 super 可以帮助你更好地组织代码,实现父类和子类之间的清晰分离和协作。

本文含有隐藏内容,请 开通VIP 后查看