У меня есть класс с именем 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);
}
}
Просто бросьте это:
public class TriangleHandler extends AbstractHandler{
public tick(AbstractShape shape){
// Since we KNOW it a triangle, we can cast it
Triangle triangle = (Triangle)shape;
triangle.doTrinagleStuff();
}
}
Вы не можете без кастинга. Вы можете выполнять только те методы, которые определены в абстрактном классе, и это нормально, если вы реализуете его в классе треугольников с его конкретной реализацией. Чтобы иметь возможность запускать метод, который не определен абстрактно, вам нужно будет
tick()
. Мы не понимаем, должен ли это быть конструктор или метод.