我在理解super()的概念时遇到了麻烦。Java Tutorials给出了这个示例:
public class Superclass {
public void printMethod() {
System.out.println("Printed in Superclass.");
}
}
public class Subclass extends Superclass {
// overrides printMethod in Superclass
public void printMethod() {
super.printMethod();
System.out.println("Printed in Subclass");
}
public static void main(String[] args) {
Subclass s = new Subclass();
s.printMethod();
}
}但是如果我覆盖了printMethod,为什么我需要调用超类方法呢?为什么我不能在printMethod()的子类方法中写任何东西,然后继续呢?
发布于 2014-02-10 14:39:59
绝对没有必要打电话给管理员。如果您需要的话,它只是帮助您调用包含在超类方法中的逻辑。很多时候,您希望精确的逻辑运行,然后提供额外的逻辑。
覆盖并不总是意味着提供全新的逻辑。有时,您希望提供一些细微的变化。例如,如果方法返回一个值,则调用超类方法并获取该值。然后,使用子类方法中的逻辑对该对象进行一些细微的修改,并将其返回给调用者。
发布于 2014-02-10 14:39:49
您可以覆盖它。在这种情况下,父方法将被忽略。如果希望父方法在子类中执行,则使用super()。
发布于 2014-02-10 14:42:46
这是为了避免重复的代码。假设你有一个类:
public class SuperClass() {
private int var1;
private int var2;
private int var3;
public SuperClass() {
var1 = 1;
var2 = 2;
var3 = 3;
}
}和一个子类:
public class SubClass() {
private int var1;
private int var2;
private int var3;
private int var4;
public SubClass() {
super();
var4 = 4;
}
}在本例中,您将使用super()调用超类构造函数(构造函数通常用于初始化成员),因此您可以专注于SubClass成员,而不必重复所有的初始化代码行(对于var1、var2和var3)。
https://stackoverflow.com/questions/21670525
复制相似问题