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
可以帮助你更好地组织代码,实现父类和子类之间的清晰分离和协作。