我有一个名为component的类,它将Object的形状作为参数。创建组件对象的主类并不确切地知道它发送给它的形状类型,它只知道它发送一个抽象形状。然而,我的组件知道它只会得到一个三角形,因此使用它的特定属性。
我的问题,如何将Abstract参数转换为它的特定子类?例如:
public class TriangleHandler extends AbstractHandler{
//More
//Code
//Here
public tick(AbstractShape shape){
shape.doTrinagleStuff();
}
}
public class MainClass{
private AbstractShape currentShape;
private AbstractHandler currentHandler;
//More
//Code
//Here
public tick(){
currentHandler.tick(currentShape);
}
}
答案 0 :(得分:1)
你不能没有施法。 您只能执行抽象类中定义的方法,如果您在具有特定实现的三角形类中实现它,那么这是可以的。 为了能够运行未在摘要中定义的方法,您必须强制转换
答案 1 :(得分:0)
投下它:
public class TriangleHandler extends AbstractHandler{
public tick(AbstractShape shape){
// Since we KNOW it's a triangle, we can cast it
Triangle triangle = (Triangle)shape;
triangle.doTrinagleStuff();
}
}