首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >理解“超级”的概念?

理解“超级”的概念?
EN

Stack Overflow用户
提问于 2014-02-10 14:36:41
回答 7查看 172关注 0票数 0

我在理解super()的概念时遇到了麻烦。Java Tutorials给出了这个示例:

代码语言:javascript
运行
复制
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()的子类方法中写任何东西,然后继续呢?

EN

回答 7

Stack Overflow用户

发布于 2014-02-10 14:39:59

绝对没有必要打电话给管理员。如果您需要的话,它只是帮助您调用包含在超类方法中的逻辑。很多时候,您希望精确的逻辑运行,然后提供额外的逻辑。

覆盖并不总是意味着提供全新的逻辑。有时,您希望提供一些细微的变化。例如,如果方法返回一个值,则调用超类方法并获取该值。然后,使用子类方法中的逻辑对该对象进行一些细微的修改,并将其返回给调用者。

票数 3
EN

Stack Overflow用户

发布于 2014-02-10 14:39:49

您可以覆盖它。在这种情况下,父方法将被忽略。如果希望父方法在子类中执行,则使用super()

票数 0
EN

Stack Overflow用户

发布于 2014-02-10 14:42:46

这是为了避免重复的代码。假设你有一个类:

代码语言:javascript
运行
复制
public class SuperClass() {
    private int var1;
    private int var2;
    private int var3;

    public SuperClass() {
        var1 = 1;
        var2 = 2;
        var3 = 3;   
    }
}

和一个子类:

代码语言:javascript
运行
复制
public class SubClass() {
    private int var1;
    private int var2;
    private int var3;
    private int var4;

    public SubClass() {
        super();
        var4 = 4;
    }
}

在本例中,您将使用super()调用超类构造函数(构造函数通常用于初始化成员),因此您可以专注于SubClass成员,而不必重复所有的初始化代码行(对于var1var2var3)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21670525

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档