我有这些课程。

public class Car extends JComponent {

}

public class Mazda extends Car {

}

public class Subaru extends Car {
}


在我的汽车课上,我重写了方法绘画组件

    @Override
public void paintComponent(Graphics g) {
    //why my planets aren't painted by this method
    if (this instanceof Mazda) {
        g.fillOval(0, 0, this.getWidth(), this.getHeight());
        System.out.println(this.getClass());
    }
    if (this instanceof Subaru) {
        g.setColor(Color.blue);
        g.fillOval(0, 0, this.getWidth(), this.getHeight());
        System.out.println(this.getClass());
    }
}


它可以很好地绘制mazda实例,但是从未调用过subaru实例的代码。看来斯巴鲁不是从Car继承Jcomponent吗?或为什么不调用painComponent? Java的新手,所以我可能缺少一些基本的知识

最佳答案

我认为,您在设计上存在问题,因为,如果您想从超类中使用@Override方法,则不错的选择是在基类(例如MazdaSubaru,)中进行操作,尤其是您想要指定其他行为。在类似Car的抽象类中,您可以使用@OverrideMazda通用的方法,而对于超类的子级并不重要。因此,我认为您可以这样编写此结构:

class  Car extends JComponent{

}

class Mazda  extends Car{

  @Override
  public void paintComponents(Graphics g) {
    g.fillOval(0, 0, this.getWidth(), this.getHeight());
    System.out.println(this.getClass());
  }
}


class Subaru extends Car{

  @Override
  public void paintComponents(Graphics g) {
    g.setColor(Color.blue);
    g.fillOval(0, 0, this.getWidth(), this.getHeight());
    System.out.println(this.getClass());
  }

}


然后创建Mazda类Subaru并调用方法:Mazda mazda = new Mazda()或使用polimorphism并创建e.q。 mazda.paintComponent(...像这样:Mazda

关于java - 类不继承自扩展到JComponent的类,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/41867886/

10-08 20:33