2017-01-26 16 views
1

私はこれを持っています。私の車クラスでJComponentに拡張されたクラスから継承しないクラス

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

を上書きするには、マツダのインスタンスがうまく描くが、スバルのインスタンスのためのコードは、単にと呼ばれることは決してありません。スバルがJcomponentをCarから継承していないようですね?なぜpainComponentを呼び出さないのですか? New to Javaのため、基本的なものが欠けている可能性があります。

+2

なぜあなたは 'Mazda'と' Subaru'の 'paintComponent'をオーバーライドしませんか? –

+0

私はしようとしたが、マツダのコードだけではなく、スバルでは、私も車で抽象化しようとしたが運がない。 –

+0

インスタンスはどのように追加されますか? –

答えて

0

私はあなたがスーパークラスから@Override方法にしたい場合は、適切なオプションを使用すると、異なる動作を指定する場合、Mazdaまたは特にSubaru,のように、基本クラスでそれを行うです、ので、あなたが、設計に問題がある、と思います。 Carのような抽象クラスでは、MazdaSubaruに共通する方法は@Overrideであり、スーパークラスの子どもにとっては重要ではありません。

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 = new Mazda()をし、メソッド呼び出し::mazda.paintComponent(...またはpolimorphismを使用してe.q.を作成するので、私はあなたがこのようなこのような構造を記述することができると思いますMazdaこのように:Car mazda = new Mazda();

0

スバルクラスは必ずCarから継承していますが、まったく表示されていない可能性があります。そこそのためのいくつかの理由がありますが、コードを見ることなく、それだけで推測される:

  • それが追加された親がいない

    1. スバルは別のインスタンス(?マツダ)で親に追加、または置換されていません
    2. スバルオフ画面を表示して、必要が、それは
    3. スバルゼロ次元で、何も
    4. ...

    注意をペイントしないようにペイントしないように: instanceofの使用は、多くの場合、OOP設計の欠陥を示しています Why not use instanceof operator in OOP design?

    各サブクラスはまったくinstanceofを使用せずにpaintComponentの独自のバージョンを持っている場合、それはより多くのOOだろう。そうする利点の1つ:新車モデルを追加する場合、Carクラスを変更する必要はありません。

  • 関連する問題