Правильно ли я понимаю, что абстрактный класс реализует базовый функционал, а классу наследнику передается лишь определенная часть функционала?
Предположим, у меня есть задача по извлечению ключей из строки. Поскольку строка может быть разной и извлекать нужно будет разные типы ключей, то для меня имеет смысл создать абстрактный класс, базовый функционал которого просто будет хранить обработанные ключи.
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;
}
}
Правильно ли я понял замысел абстрактного класса?