日期:2014-05-20  浏览次数:20796 次

编程思想中一不明白的例子
import   java.util.*;

class   Shape{
void   draw(){}
void   erase(){}  
}

class   Circle   extends   Shape{
void   draw(){
System.out.println( "Circle.draw() ");
}
void   erase(){
System.out.println( "Circle.erase() ");
}
}

class   Square   extends   Shape{
void   draw(){
System.out.println( "Square.draw() ");
}
void   erase(){
System.out.println( "Square.erase() ");
}
}

class   Triangle   extends   Shape{
void   draw(){
System.out.println( "Triangle.draw() ");
}
void   erase(){
System.out.println( "Triangle.erase() ");
}
}

class   RandomShapeGenerator{
private   Random   rand=new   Random();
public   Shape   next(){
switch(rand.nextInt(3)){
        default:     //在去掉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(int   i=0;i <s.length;i++){
s[i].draw();  
}
}
}

各位能否告诉我为什么在switch那必须有default么?而且我把它放在case之后加上break也是出现同样的错误。

------解决方案--------------------
public Shape next()
这个方法需要返回一个Shape对象
如果你的switch没有default分支
那么在case判断完没有对应的rand.nextInt(3)值的时候没有对象返回,不符合这个方法的声明,所以会报错,提醒你这个方法可能没有返回Shape对象
------解决方案--------------------
up
------解决方案--------------------
next()方法必须要返回一个Shape对象