java 多态里的些错误

来源:百度知道 编辑:UC知道 时间:2024/05/19 03:59:23
public class Shape{
public void draw(){}
public void p(){
System.out.println("here")
}
}
public class Square extends Shape{
public void draw(){
System.out.println("Square.draw()");
public void p(){
System.out.println("here is Triangle");
}
}

import java.util.*;
public class RandomShapeGenerator{
private Random rand = new Random(47);
public Shape next(){
switch(rand.nextInt(3)){
default:
case 0 : return new Circle();
case 1 : return new Square();
case 2 : return new Triangle();
}
}
}

public class Shapes{
private static RandomShapeGenerator gen = new RandomShapeGenerator();
public static void main(String[] args){
Shape[] s = new Shape[9];
for(int i = 0;i<s.length;i++)
s[i] = gen.next();
for(Shape shp : s)
shp.draw();
shp.p();

错误提示
<

一个Java文件中有且只能有一个public修饰的类
第一个错误:
public static void main(String[] args)所在的那个类为主类,就是用public修饰的类

第二个错误
public void draw(){
System.out.println("Square.draw()");
public void p(){
System.out.println("here is Triangle");
}
}
你在draw()方法中又写了一个p()方法,这是不行的,方法可以调用方法,但不可以嵌套方法。这个应该是书写错误,所以提示你非法的表达式开始

第三个:
case 0 : return new Circle();
case 1 : return new Square();
case 2 : return new Triangle();

你那个Circle类是哪里来的?还有那个Triangle类是哪里的,所以会提示找不到符号

第四个:
System.out.println("here") 这一句没有用分号结束

第五个:
switch(rand.nextInt(3)){
default:
case 0 : return new Circle();
case 1 : return new Square();
case 2 : return new Triangle();
}
default以后什么也没有,在这里就是什么也不做.没有break语句,所以如果产生的值是0的话,那么下面那两个语句也会被执行。

楼主可以参考这些改进一下自己的程序!
下面是修改以后的示例代码,你可以自己完善一下
import java.util.*;

class Shape
{