在我的编码中,父类Shape
是一个抽象对象,它有几个子类。我的编码如下:
import java.util.Random;
abstract class Shape {
protected Color color;
protected Point point;
public Shape(Color color, Point point) {
this.color = color;
this.point = point;
}
public abstract String Type();
}
class Rectangle extends Shape {
public Rectangle(Color color, Point point) {
super(color, point);
}
public String Type() {
return "Rectangle";
}
class Triangle extends Shape {
public Triangle(Color color, Point point) {
super(color, point);
}
public String Type() {
return "Triangle";
}
}
class Eclipse extends Shape {
public Eclipse(Color color, Point point) {
super(color, point);
}
public String Type() {
return "Eclipse";
}
}
public class ShapeTest {
public static void main(String[] args) {
Color color = new Color(50, 100, 150);
Point point = new Point(50, 50);
Shape[] theShape = {
new Rectangle(color, point),
new Triangle(color, point),
new Eclipse(color, point)
};
Shape shapechoice;
Random select = new Random();
for (int i = 0; i < 10; i++) {
shapechoice = theShape[select.nextInt(theShape.length)];
System.out.println("The " + (i + 1) + "type you chose is: " + shapechoice.Type());;
}
}
}
Eclipse说&#34;方法main不能声明为static;静态方法只能在静态或顶级类型中声明&#34;在public static void main(String[] args){
,但我认为这种语法应该是一种常用的格式,有点固定吗?为什么在这里我需要删除&#34;静态&#34;?对不起,我是java的新手,可能会因此而模糊不清。
答案 0 :(得分:2)
从内部类main()
移动ShapeTest
方法。您无法将其置于非静态非顶级课程中。在现有代码中,您可以将main()
放入Rectangle
,也可以将ShapeTest
移至顶级类。
答案 1 :(得分:0)
你有一个class
声明:
class Rectangle extends Shape {
}
这是一个顶级课程。
接下来,你有一个内部类声明:
class Rectangle extends Shape {
public class ShapeTest {
}
}
这是一个内部类,因为它不是static
。它位于Rectangle
的实例上下文中,并隐含引用Rectangle.this
。
接下来你有一个静态方法声明:
class Rectangle extends Shape {
public class ShapeTest {
public static void main(String[] args){
}
}
}
此static
声明位于ShapeTest
的实例声明中。这是不允许的。
因此要么将ShapeTest
声明为静态嵌套类(在静态嵌套类中使用main
会很奇怪且令人困惑):
class Rectangle extends Shape {
public static class ShapeTest {
public static void main(String[] args){
}
}
}
或者在自己的ShapeTest
文件中声明ShapeTest.java
作为顶级课程(更好):
public class ShapeTest {
public static void main(String[] args){
}
}
答案 2 :(得分:0)
您必须将main()
方法移至顶级类或静态类。将main()
方法移至课程Rectangle
(按照Elliott的建议)或将您的课程ShapeTest
static
移至,例如。
public class Rectangle {
public static class ShapeTest {
public static void main(String[] args) {
}
}
}
然后,您可以使用java Rectangle.ShapeTest
调用该课程。
答案 3 :(得分:0)
您需要将静态main
方法放在(A)顶级或(B)静态类中。您已将main
方法放在常规嵌套类中,该类依赖于它所定义的类的实例。
尝试将关键字static
添加到Triangle
,Eclipse
和ShapeTest
的定义中,如下所示:
public static class ShapeTest
。
顺便说一句:你最好创建多个文件。
BTW 2:为什么Triangle
,Eclipse
和ShapeTest
内部的Rectangle类?