@thatmaniscool

Правильно ли я реализую абстрактный класс?

Правильно ли я понимаю, что абстрактный класс реализует базовый функционал, а классу наследнику передается лишь определенная часть функционала?
Предположим, у меня есть задача по извлечению ключей из строки. Поскольку строка может быть разной и извлекать нужно будет разные типы ключей, то для меня имеет смысл создать абстрактный класс, базовый функционал которого просто будет хранить обработанные ключи.
public abstract class KeyExtractor {
    private List<String> list = null;
    private List<String> keys = null;
    public KeyExtractor() {
        keys = new ArrayList<>();
        list = new ArrayList<>();
        list.add("Key: @123");
        list.add("Key: @456");
        list.add("Key: @789");
    }

    public void extract (){
        keys = list.stream().map(s -> {
            return keyExtract(s);
        }).collect(Collectors.toList());

        System.out.println(keys);
    }

    public abstract String keyExtract (final String s);

}


Далее я создаю класс наследник от абстрактного класса, где реализую логику по извлечению ключей.
public class Extractor extends KeyExtractor{
    @Override
    public String keyExtract(String s) {
        Pattern pattern = Pattern.compile("(?<=\\@)\\d+");
        Matcher matcher = pattern.matcher(s);
        if(matcher.find()){
            return matcher.group();
        }
        return null;
    }
}

Правильно ли я понял замысел абстрактного класса?
  • Вопрос задан
  • 122 просмотра
Пригласить эксперта
Ответы на вопрос 2
@Wan-Derer
Зобанели на Хабре, волки́ ;((
абстрактный класс реализует базовый функционал, а классу наследнику передается лишь определенная часть функционала?

Вроде наоборот :) Конкретный класс расширяет абстрактный, т.е. добавляет ему возможностей. Например, абстрактный Animal{} может и не уметь "говорить", поэтому метод void say(){} ему задавать не надо. И Fish extends Animal{} не будет иметь этого метода, а Dog extends Animal{} будет.
Либо класс может уточнять абстрактный класс. Пример: Animal может иметь абстрактный метод void move();, а потомки будут обязаны его реализовать: птичка будет летать, рыбка плавать, а собачка бегать.
Как-то так :)
Ответ написан
Комментировать
AshBlade
@AshBlade
Просто хочу быть счастливым
На мой взгляд
базовый функционал
надо заменить на
общий функционал
и
определенная часть функционала
на
конкретная реализация функционала
, т.к. здесь скорее всего пример Шаблонного метода.
В общем случае, догадка верна - абстрактный класс может использоваться в качестве базовой реализации на основании которой создаются другие классы
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
Bell Integrator Ульяновск
До 400 000 ₽
Bell Integrator Хабаровск
До 400 000 ₽
Bell Integrator Ижевск
До 400 000 ₽
11 мая 2024, в 00:19
1000 руб./за проект
10 мая 2024, в 23:51
30000 руб./за проект
10 мая 2024, в 23:33
2500 руб./за проект