最近在弄Java抽象类,有一个Shape的抽象内,用Point,Line,Circle等来继承Shape,并实现一定的功能,其中draw()都能够很好的实现,但是要实现用户互动,让用户添加图形类型,将添加操作也用抽象类来实现,但是总是报错:Exception in thread "main" java.lang.ClassCastException: java.lang.Object cannot be cast to vf.Shape
at vf.vftest.main(vftest.java:35)
会不会子类在实现抽象方法read()时有问题哦?下面是源代码,请高手们多多指教,谢谢了!package vf;
/**
 * @author Jhat
 * @date 2010-5-6 下午10:58:04
 */
public abstract class Shape
{
String name;
String arg;
public abstract void draw();
public abstract Object read(String name,String arg);
}
package vf;
/**
 * @author Jhat
 * @date 2010-5-6 下午10:59:04
 */
public class Point extends Shape
{
double x,y;
public void draw()
{
System.out.println("Point:"+"("+x+","+y+")");
}
public Object read(String name,String arg)
{
if(name.equalsIgnoreCase("point"))
{
Point point=new Point();
System.out.println(arg);
point.x=Double.parseDouble("2");
point.y=Double.parseDouble("8");
return point;
}
return false;
}
}
package vf;
/**
 * @author Jhat
 * @date 2010-5-6 下午11:04:07
 */
public class Line extends Shape
{
double x1,y1,x2,y2;
public void draw()
{
System.out.println("Line:"+"("+x1+","+y1+")"+"("+x2+","+y2+")");
}
public Object read(String name,String arg)
{
if(name.equalsIgnoreCase("line"))
{
Line line=new Line();
System.out.println(arg);
line.x1=Double.parseDouble("2");
line.y1=Double.parseDouble("2");
line.x2=Double.parseDouble("2");
line.y2=Double.parseDouble("2");
return line;
}
return false;
}
}
package vf;
/**
 * @author Jhat
 * @date 2010-5-6 下午11:04:18
 */
public class Circle extends Shape
{
double x,y,r;
public void draw()
{
System.out.println("Circle:"+"("+x+","+y+")"+"  "+r);
}
public Object read(String name,String arg)
{
if(name.equalsIgnoreCase("circle"))
{
Circle circle=new Circle();
System.out.println(arg);
circle.x=Double.parseDouble("2");
circle.y=Double.parseDouble("2");
circle.r=Double.parseDouble("2");
return circle;
}
return false;
}
}
package vf;import java.util.*;
import java.io.*;
/**
 * @author Jhat
 * @date 2010-5-6 下午11:13:05
 */
public class vftest
{

/**
 * @param args
 */
public static void main(
String[] args)
{ // TODO Auto-generated method stub
ArrayList<Object> shapes=new ArrayList<Object>();
//用于保存图像对象
BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
//用于读取数据
String information;//用于暂时保存数据
String[] inf;//用于保存拆分后的数据
try
{
information=br.readLine();//读取数据
while(information!=null)
{
inf=information.split(" ");//以空格拆分一行数据
Object shape=new Object();
((Shape)shape).read(inf[0], inf[1]);
}

}
catch(IOException e)
{
System.out.println("Read error!");
}
/*Point p=new Point();
p.x=3;
p.y=4;
shapes.add(p);*/
for(int i=0;i<shapes.size();i++)
{
((Shape)(shapes.get(i))).draw();
}
}

}

解决方案 »

  1.   

    但是运行要报错啊:Exception in thread "main" java.lang.ClassCastException: java.lang.Object cannot be cast to vf.Shape
    at vf.vftest.main(vftest.java:35)
      

  2.   

    ArrayList里面不建议添加不同实体的东西
      

  3.   

    ----类型转换异常------
    Object shape=new Object();
    ((Shape)shape).read(inf[0], inf[1]);
    ---------------------------------
    new的是Object,怎么可能强制转换成Shape啊,强转也不是乱转吧。。
    --------------------