Определить точный класс из абстрактного класса в Java

1

У меня есть класс с именем 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);
    }
}
  • 1
    Хорошо, если метод принимает только треугольники, зачем использовать AbstractShape? Использовать треугольник напрямую нет?
  • 0
    Можете ли вы показать еще немного кода. Ваш вопрос сбивает с толку, особенно из-за этой tick() . Мы не понимаем, должен ли это быть конструктор или метод.
Теги:
abstract

2 ответа

0
Лучший ответ

Просто бросьте это:

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();
    }
}
1

Вы не можете без кастинга. Вы можете выполнять только те методы, которые определены в абстрактном классе, и это нормально, если вы реализуете его в классе треугольников с его конкретной реализацией. Чтобы иметь возможность запускать метод, который не определен абстрактно, вам нужно будет

Ещё вопросы

Сообщество Overcoder
Наверх
Меню