2011-04-12 91 views
1

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方法被调用吗?

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

回答

3

为什么会自动调用setPadding方法?它不会被自动调用 - 明确地说,它必须实际上调用它。你有什么理由相信LabelField的构造函数链中的某些内容会调用它吗?

如果你想使customPadding(它应该用PascalCase命名,btw)总是以特定的方式设置它的填充,你应该从构造函数中调用它。

+0

我觉得setPadding应该被调用,因为Field类的paint方法在被覆盖时会自动调用。这是因为paint()是抽象的吗? – user701254 2011-04-12 21:27:08

+2

@ user701254:不,这是因为调用了paint()来显示UI。它*具有*被称为任何显示。方法不是神奇地称呼的 - 有些东西需要称呼它们。这听起来像你会受益于编写Java中的一些控制台应用程序,然后再转到UI代码中......控制台应用程序让您在获得Swing的所有复杂性之前了解有关该语言的更多内容。 – 2011-04-12 21:50:18

+0

好的,感谢帮帮我。 – user701254 2011-04-13 08:53:35

1

should'nt我的自定义setPadding方法被调用?

如果原来的setPadding不是首先被调用,

即,如果LabelField.setPaddingLabelField,则应调用customPadding.setPadding来调用customPadding.setPadding。 (但是,如果LabelField.setPadding不会被称为,则customPadding.setPadding也不应该)。

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

+0

好的,LabelField应该在其构造函数中调用setpadding来调用它? – user701254 2011-04-12 21:46:33

+0

*某人应该在某个时候调用'setPadding'来执行该方法。也就是说,在它的构造函数中调用'setPadding'的'LabelField'是*充分的*但不是*必需*的条件。 – aioobe 2011-04-12 21:48:22