我目前正在学习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
的绘制方法。
答案 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) {}
如果你的类在括号内有抽象方法你必须实现抽象方法
答案 3 :(得分:0)
接口主体中的每个方法声明都是隐式公共和抽象的。
参考: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。