我有这些课程。
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
方法,则不错的选择是在基类(例如Mazda
或Subaru,
)中进行操作,尤其是您想要指定其他行为。在类似Car
的抽象类中,您可以使用@Override
和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类
Subaru
并调用方法:Mazda mazda = new Mazda()
或使用polimorphism并创建e.q。 mazda.paintComponent(...
像这样:Mazda
关于java - 类不继承自扩展到JComponent的类,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/41867886/