类不是抽象的,并且不会覆盖抽象方法

因此,我一直在为编程类编写抽象作业,但遇到了问题。我现在的目标是能够使用抽象,然后能够使用矩形和椭圆形绘制一个简单的城市,例如矩形建筑物或灯柱上的椭圆形灯。

我在编译时收到的错误是:MyTestApp.Rectangle不是抽象的,并且不会覆盖MyTestApp.Shape中的抽象方法drawEllipse(java.awt.Graphics)。该错误显示在类Shape下方的“矩形扩展类Shape

{”类中。

我的问题是我的抽象错了吗?我一直在弄乱Rectangle和Ellipse类中的构造函数和draw()方法,有一段时间了,但仍然找不到找到解决方案的运气。

代码如下:

import java.awt.*;

import javax.swing.*;

public class MyTestApp extends JPanel {

Rectangle rect;

Ellipse oval;

public static void main(String [] args) {

MyTestApp myTestApp = new MyTestApp ();

myTestApp.test();

}

public MyTestApp () { //creates the jframe

JFrame frame = new JFrame("MyClass Driver");

setBackground(new Color(200, 250, 200));

setPreferredSize(new Dimension(500, 400));

frame.add(this);

frame.pack();

frame.setVisible(true);

}

public void delay(int msecs) {

try {

Thread.sleep(msecs);

} catch (InterruptedException e) {

}

}

public void paint(Graphics g) {//paints the rectangle and ellipse

super.paint(g);

if (rect != null)

rect.drawRectangle(g);

if (oval != null)

oval.drawEllipse(g);

}

public void test() {//gives the x/y position, width/height, and fill/outline color for the rectangle and oval

delay(1000);

rect = new Rectangle(20, 30, 23, 75, Color.GREEN, Color.BLUE);

oval = new Ellipse(10, 10, 10 , 34, Color.RED, Color.MAGENTA);

repaint();

}

public abstract class Shape{//abstract class Shape that sets the x/y, width/height, and colors for the shapes

private int x, y, width, height;

private Color fillColor;

private Color outlineColor;

public Shape(int x, int y, int width, int height, Color fillColor, Color outlineColor) {

setXY(x, y);

setSize(width, height);

setFillColor(fillColor);

setOutlineColor(outlineColor);

}

public boolean setXY(int x, int y) {

this.x = x;

this.y = y;

return true;

}

public void setSize(int width, int height) {

if (width > 0)

this.width = width;

if (height > 0)

this.height = height;

}

public boolean setFillColor(Color fillColor){

if (fillColor == null) return false;

this.fillColor = fillColor;

return true;

}

public boolean setOutlineColor(Color outlineColor){

if (outlineColor == null) return false;

this.outlineColor = outlineColor;

return true;

}

public Color getFillColor() {

return fillColor;

}

public Color getOutlineColor() {

return outlineColor;

}

public abstract void drawRectangle(Graphics g);//do i need two?

public abstract void drawEllipse(Graphics g);//do i need both?

}

class Rectangle extends Shape{//!!!!!!!!!! where the error shows

public Rectangle(int x, int y, int width, int height, Color fillColor, Color outlineColor) {

super(x, y, width, height, fillColor, outlineColor);

}

public void drawRectangle(Graphics g){//draws the retangle

g.setColor(fillColor);

g.fillRect(x, y, width, height);

g.setColor(outlineColor);

g.drawRect(x, y, width, height);

}

}

class Ellipse extends Shape{

public Ellipse(int x, int y, int width, int height, Color fillColor, Color outlineColor) {

super(x, y, width, height, fillColor, outlineColor);

}

public void drawEllipse(Graphics g){//draws the ellipse

g.setColor(fillColor);

g.fillOval(x, y, width, height);

g.setColor(outlineColor);

g.drawOval(x, y, width, height);

}

}

}

感谢您的阅读和帮助!

回答:

Rectangle和Ellipse这两个类都需要覆盖这两个抽象方法。

要变通解决此问题,您有3个选项:

  • 两种方法加法
  • 使每个扩展Shape的类抽象
  • 有一个方法可以执行将扩展Shape的类的功能,并在Rectangle和Ellipse中覆盖该方法,例如:

        abstract class Shape {

// ...

void draw(Graphics g);

}

    class Rectangle extends Shape {

void draw(Graphics g) {

// ...

}

}

最后

    class Ellipse extends Shape {

void draw(Graphics g) {

// ...

}

}

您可以在它们之间切换,如下所示:

    Shape shape = new Ellipse();

shape.draw(/* ... */);

shape = new Rectangle();

shape.draw(/* ... */);

再次,只是一个例子。

以上是 类不是抽象的,并且不会覆盖抽象方法 的全部内容, 来源链接: utcz.com/qa/413134.html

回到顶部