Java中的扩展类有多庞大?

时间:2012-05-14 16:18:45

标签: swing class extend

我有一个名为MapTile的课程,其范围为JLabel。我正在做的是在GridLayout中加载一个带有大量MapTile的JPanel。我注意到当我加载100x100 MapTile时,这个过程需要比100x100 JLabel中的加载时间更长。这是我下面的MapTile课程。

public class MapTile extends JLabel {
private static final long serialVersionUID = 1L;
private boolean selected;
private Point location;

public MapTile(){
    super();
    location = new Point();
}
public void setLocation(int x, int y){
    setLocation(new Point(x,y));
}
public void setLocation(Point p){
    location = p;
}
public Point getLocation(){
    return location;
}
public void setSelected(Boolean b){
    selected = b;
    if (selected){
        ((GridPanel)this.getParent()).addToSelection(this);
        this.setBorder(BorderFactory.createLineBorder(Color.RED));
    } else {
        this.setBorder(BorderFactory.createLineBorder(Color.BLACK));
    }
    this.repaint();
}
public boolean isSelected(){
    return selected;
}
}

没有什么花哨的,我只是覆盖了setLocation方法并添加了一些其他方法。我还添加了三个实例变量。

扩展一个类会导致一堆额外的权重吗?

我忍不住认为我的MapTile类非常简单,但加载100x100 MapTile与加载100x100 JLabel之间的时间差别很大。与JLabel相比,大量加载MapTile需要大约4-5倍。

1 个答案:

答案 0 :(得分:2)

您不仅要覆盖setLocation,而且每次调用Point方法时都会创建setLocation(int,int)的新实例,这可能会对性能产生影响

除此之外: - 你有没有测试过,当你删除被覆盖的方法时,你不再经历减速 - 您是否已分析应用程序以查看性能损失发生的位置

哦是的,我不认为你被覆盖的版本setLocation是正确的。我担心如果你想让super.setLocation行为正确

,你也必须致电JLabel