【发布时间】:2014-02-03 09:18:20
【问题描述】:
出于好奇...
假设我们有一个扩展 Jpanel 的类。而且我们不需要所有的 Jpanel 方法。例如,我们不会在新类上使用任何 ToolTipText,因此我们不需要 setToolTipText 方法。 我的问题是:是否可以从新类中删除我们不需要的方法?如果是,是否对执行速度有任何影响(可能是更快的构建)?
【问题讨论】:
标签: java swing inheritance
出于好奇...
假设我们有一个扩展 Jpanel 的类。而且我们不需要所有的 Jpanel 方法。例如,我们不会在新类上使用任何 ToolTipText,因此我们不需要 setToolTipText 方法。 我的问题是:是否可以从新类中删除我们不需要的方法?如果是,是否对执行速度有任何影响(可能是更快的构建)?
【问题讨论】:
标签: java swing inheritance
是否可以从新类中删除我们不需要的方法?
是的,这是可能的,但请注意,将任何 Listener 添加到普通 JPanel(任何方法都已删除)和将 Listener 添加到 JPanel 之间存在差异,其中Listener 被移除,通知器被修改
找不到真正的原因,可能会适得其反,但如果您想修改内置的侦听器、通知器、加速器,情况就会大不相同
API 中实现的所有方法addXxxXxx 都可以删除(对JPanel 有效,不能对所有化合物JComponents 有效)
如果是,是否对执行速度有任何影响(更快 建设可能)?
【讨论】:
是否可以从新类中删除我们不需要的方法?
如果你想对类的用户隐藏部分界面,那么你不应该使用inheritance。请记住,inheritance 用于is-a 关系,如果子类A 是 JPanel,那么它肯定对ToolTip 有用。您应该使用Composition,它允许您屏蔽部分组合对象方法。
示例
public class A
{
public void wantedMethod() {}
public void unwantedMethod() {}
}
如果我想从我的子类中隐藏unwantedMethod,我可以这样做:
public class B
{
private A a;
public void wantedMethod() {
a.wantedMethod();
}
}
这将不允许unwantedMethod 逃到B 类的interface。
【讨论】:
inheritance 有它的用途,但是当您处理与 Java 中的 Component 类型一样大的类时,您确实需要考虑另一种方法。
如果从不调用该方法,则类的执行速度没有区别。删除方法会减少编译时间,但可以忽略不计。
【讨论】:
不可能,方法的数量不影响执行速度。从理论上讲,加载一个方法较少的类不会花费那么长时间,但它只是几个字节,因此只有几微秒,无论如何,方法首先就在那里。
【讨论】: