java - 类不继承自扩展至 JComponent 的类

标签 java inheritance multiple-inheritance jcomponent

我有这些类(class);

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());
    }
}

它可以很好地绘制马自达的实例,但斯巴鲁实例的代码永远不会被调用。看来斯巴鲁并没有继承Car的JComponent?或者为什么不调用 painComponent? Java 新手,所以我可能缺少一些基本的东西

最佳答案

我认为,你的设计有问题,因为,如果你想@Override来自父类(super class)的方法,好的选择是在基类中执行此操作,例如 MazdaSubaru,特别是,您想要指定不同的行为。在像 Car 这样的抽象类中你可以@Override常见的方法有MazdaSubaru ,并且对于 super 类的 child 这样做并不重要。所以,我认为你可以这样写这个结构:

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 Mazda mazda = new Mazda()并调用方法:mazda.paintComponent(...或者使用多态性并创建 e.q. Mazda像这样:Car mazda = new Mazda();

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

相关文章:

c++ - 如何访问多个级别的重写元素?

c++ - Qt QSharedDataPointer 多重继承菱形模式?

Java PDF 操作,基于模式匹配替换文本,带有超链接

从性能pov看Java静态代码分析

Java 多维数组

JavaScript继承规则

c# - 为什么类 Type 不是密封的,我能用它做什么?

java - 如何测试带有自定义 bean-spel 的 @PreAuthorize 是否有效?

java - 可以避免在 Java 中默认调用 super() 吗?

c++ - 为什么这行得通? (多重继承,切片)