如何创建属于接口的实例并实现它

时间:2016-04-17 05:11:10

标签: java inheritance polymorphism

我目前正在学习Java,所以请忍受我的无知。这是我目前的代码

Shape.java

public interface Shape {
    public abstract void draw();
}

Rectangle.java

public abstract class Rectangle implements Shape {

    private final double width, length;

    public Rectangle() {
        this(1,1);
    }
    public Rectangle(double width, double length) {
        this.width = width;
        this.length = length;
    }

    public void draw() {
        System.out.println("A rectangle of sides " +  length + " by " + width + " will be drawn");
    }

}

TestPolymorph.java

public class TestPolymorph implements Shape {

    public static void main(String[] args) {
        Shape[] drawObject = { new Rectangle(40, 60) };
        drawObject[0].draw();
    }

    @Override
    public void draw() {
        // TODO Auto-generated method stub

    }

}

我当前的代码是否有任何问题,因为它无效。我的问题是如何创建属于drawObject类的Shape实例,并且在运行时drawObject期间将创建两个参数,长度和宽度(例如,给出40和60),然后将调用Rectangle的绘制方法。

5 个答案:

答案 0 :(得分:5)

你很接近,确实没有必要让你的TestPolymorph实现Shape。这是你的驱动程序,而不是实现接口的模型,所以你可以把它关掉。

最后,从Rectangle类中删除摘要。这不是一个抽象类,因为你实际上想要一个这种类型的实例。

答案 1 :(得分:2)

尝试从abstract对象中删除Rectangle修饰符。您也不需要在Shape

中实施TestPolymorph.java界面

答案 2 :(得分:2)

Shape[] drawObject = { new Rectangle(40, 60) };

以上是您的代码

Shape[] drawObject = { new Rectangle(40, 60) {} };

这是正确的代码

因为您正在创建objects of abstract课程,所以您必须使用此课程  做法。或者你可以remove abstract modifier

Rectangle class

如果要创建抽象类的对象,则必须实现其所有抽象方法,因为在抽象矩形类中没有任何抽象方法,只需要new Rectangle(40, 60) {} 如果你的类在括号内有抽象方法你必须实现抽象方法

,那么在末尾bt传递空括号

答案 3 :(得分:0)

  1. 改善界面
  2. 接口主体中的每个方法声明都是隐式公共和抽象的。

    参考:http://docs.oracle.com/javase/specs/jls/se7/html/jls-9.html#jls-9.4

答案 4 :(得分:0)

简单。而不是使事情复杂化。 只是以有效的继承方式进行。 从Rectangle类中删除抽象,并且不需要TestPolymorph来实现Shape接口。 Rectangle实现了Shape接口,只是TestPolymorph中的Test Polymorphism。