Java:抽象类方法和接口

Tia*_*Tia 1 java interface abstract

下面的程序计算实例化的任意数量形状的区域总数.问题是我不知道如何输出接口的draw()方法.

这是主要类:

public class MyClass1{

public static void main(String[] args) {


    Shape[] shapes= new Shape[3];


    shapes[0]= new Circle(20.0);
    shapes[1]= new Rectangle(25, 63);
    shapes[2]= new Circle(25);

   double total=0;

  for(int i=0; i<shapes.length; i++){

    total+= shapes[i].area();

}

System.out.printf("Total: %.1f", total);

  }

 }
Run Code Online (Sandbox Code Playgroud)

超类形状

 abstract class Shape {

  abstract double area();

}
Run Code Online (Sandbox Code Playgroud)

Drawable接口

public interface Drawable {
    public abstract void draw();

}
Run Code Online (Sandbox Code Playgroud)

子类圈

public class Circle extends Shape implements Drawable {

    double radius;

    Circle(double aRadius){

    radius= aRadius;
}


   double area(){

       return Math.PI*radius*radius;
}

    public void draw(){
       System.out.println("This is a circle");
  }

}
Run Code Online (Sandbox Code Playgroud)

子类Rectangle

  public class Rectangle extends Shape implements Drawable {

   double width, height;

   public Rectangle(double aWidth, double aHeight){

    width= aWidth;
    height= aHeight;

 }

    double area(){

       return width*height;
    }

   public void draw(){

       System.out.println("This is a rectangle.");
    }
  }
Run Code Online (Sandbox Code Playgroud)

我假设要打印出draw()方法,代码应该是这样的:

Shape obj= new Rectangle();
Shape obj1= new Circle();

obj.draw();
obj1.draw();
Run Code Online (Sandbox Code Playgroud)

但它没有成功.想了解打印draw方法的正确方法以及一些解释,因为我是Java的新手.谢谢.

rge*_*man 5

draw方法不可用,因为您Shape的数组中有s,而不是Drawables.理论上你可以UndrawableShape扩展Shape但不实现Drawable,因此编译器不会让你调用draw()可能不存在的方法.

要拨打电话draw(),您可以执行以下操作:

而不是让每个具体的子类实现Drawable,具有Shape类实现Drawable. Shape是的abstract,所以它不必实现draw()自己; 子类需要实现该方法.