Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/307.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 类未从扩展到JComponent的类继承_Java_Inheritance_Multiple Inheritance_Jcomponent - Fatal编程技术网

Java 类未从扩展到JComponent的类继承

Java 类未从扩展到JComponent的类继承,java,inheritance,multiple-inheritance,jcomponent,Java,Inheritance,Multiple Inheritance,Jcomponent,我在这些课上都有这个 public class Car extends JComponent { } public class Mazda extends Car { } public class Subaru extends Car { } 在我的car类中,我重写了方法paint component @Override public void paintComponent(Graphics g) { //why my planets aren't painted b

我在这些课上都有这个

public class Car extends JComponent {

}

public class Mazda extends Car {

}

public class Subaru extends Car {
}
在我的car类中,我重写了方法paint component

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

它很好地绘制了马自达的实例,但斯巴鲁实例的代码从未被调用。看起来斯巴鲁并没有从汽车上继承Jcomponent?或者为什么不调用painComponent?Java新手,所以我可能遗漏了一些基本的东西

斯巴鲁类肯定是从Car继承的,但可能根本没有显示出来。这有一些原因,但没有看到代码,只是猜测:

  • 斯巴鲁未添加到父级,或由另一个实例(马自达?)替代
  • 添加它的父级未显示
  • 斯巴鲁离屏,无需上漆
  • 零维斯巴鲁,无需绘制
  • 注意:使用
    instanceof
    通常表明OOP设计中存在缺陷:


    如果每个子类都有自己版本的
    paintComponent
    ,而根本不必使用
    instanceof
    ,那么它将更加面向对象。这样做的一个好处是:如果添加新车型,则无需更改汽车类别。

    斯巴鲁类别肯定继承自汽车,但可能根本不会显示。这有一些原因,但没有看到代码,只是猜测:

  • 斯巴鲁未添加到父级,或由另一个实例(马自达?)替代
  • 添加它的父级未显示
  • 斯巴鲁离屏,无需上漆
  • 零维斯巴鲁,无需绘制
  • 注意:使用
    instanceof
    通常表明OOP设计中存在缺陷:


    如果每个子类都有自己版本的
    paintComponent
    ,而根本不必使用
    instanceof
    ,那么它将更加面向对象。这样做的一个好处是:如果添加新车型,汽车类别不需要更改。

    我认为,您在设计上有问题,因为,如果您想
    @覆盖super class中的
    方法,最好的选择是在基类中执行,例如
    马自达
    斯巴鲁,
    ,尤其是,您希望指定不同的行为。在像
    Car
    这样的抽象类中,您可以
    @覆盖
    方法,该方法对于
    Mazda
    Subaru
    来说很常见,对于超级类的子类来说并不重要。我想你可以这样写这个结构:

    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(…
    或使用polimorphism创建e.q.
    Mazda
    如下所示:
    Car Mazda=new Mazda()

    我认为,你在设计上有问题,因为,如果你想
    @重写超类中的
    方法,最好的选择是在基类中,比如
    马自达
    斯巴鲁,
    特别是,你想指定不同的行为。在抽象类中,比如
    汽车
    你可以
    @重写
    方法谁是谁对于
    马自达
    斯巴鲁
    来说,这是很常见的,但对于超级级的孩子来说并不重要。所以,我想你可以这样写这个结构:

    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(…
    或使用polimorphism创建e.q.
    Mazda
    如下所示:
    Car Mazda=new Mazda()在代码<马自达> <代码> >代码> SuARU < /代码>,我尝试过,但只有马自达代码工作,而不是在SubARU中,我也尝试在汽车中抽象化,但没有运气。如何添加和添加实例?考虑创建一个.删除额外的代码,在空框架A上添加马自达和SuSARU。nd告诉我们到底出了什么问题。这些信息没有默认区域设置所要求的那么有用。为什么你不在
    马自达
    斯巴鲁
    中覆盖
    paintComponent
    ?我试过了,但只有马自达代码起作用,而不是在斯巴鲁,我也试着在车内将其抽象化,但没有成功。如何以及在哪里考虑添加一个A.删除额外的代码,在一个空的框架中添加马自达和Suasu,并告诉我们到底出了什么问题。