【问题标题】:Overriding a method rules覆盖方法规则
【发布时间】:2011-04-13 06:19:49
【问题描述】:

LabelField 类有一个方法-

public void setPadding(int, int, int, int);

如果我创建一个扩展 LabelField 覆盖 setPadding 的类,就像这样 -

public class CustomPadding extends LabelField {

    public void setPadding(int, int, int, int){
      super.setpadding(5,5,5,5);
    }
}

每次我创建CustomPadding 的实例时,不应该调用我的自定义setPadding 方法吗?

目前不是,不知道为什么?

【问题讨论】:

    标签: blackberry java-me


    【解决方案1】:

    为什么会自动调用setPadding 方法?它不会被自动调用——必须明确地调用它。你有任何理由相信 LabelField 的构造函数链中的某些东西会调用它吗?

    如果您试图让customPadding(应该以 PascalCase 命名,顺便说一句)始终以特定方式设置其填充,您应该从构造函数中调用它。

    【讨论】:

    • 我认为应该调用 setPadding,因为 Field 类的 paint 方法在被覆盖时会自动调用。这是因为paint() 是抽象的吗?
    • @user701254:不,这是因为调用 paint() 是为了显示 UI。它必须被调用以显示任何东西。方法不会被神奇地调用 - 必须调用它们。在我看来,在继续编写 UI 代码之前,您可以从用 Java 编写一些控制台应用程序中受益……控制台应用程序可以让您在了解 Swing 等所有复杂性之前更多地了解该语言。
    【解决方案2】:

    不应该调用我的自定义 setPadding 方法吗?

    如果最初没有调用原始 setPadding,则不会。

    也就是说,答案是,是的,只要LabelField.setPaddingLabelField,就应该调用customPadding.setPadding。 (但如果LabelField.setPadding 不会被调用customPadding.setPadding 也不应该被调用。)

    您应该提供更多代码。 (例如,我假设您实际上在 customPadding 中有参数名称。)

    【讨论】:

    • 好的,LabelField 应该在其构造函数中调用 setpadding 才能调用它?
    • Someone 应该在某个时候调用setPadding,以执行该方法。也就是说,LabelField 在其构造函数中调用setPadding足够 但不是必要 条件。
    猜你喜欢
    • 1970-01-01
    • 2015-04-19
    • 2011-07-17
    • 2011-12-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-05
    • 2021-06-10
    相关资源
    最近更新 更多