Для чего используют абстрактные классы?
1) Нельзя создать инстанс абстрактного класса.
2) Методы объявленные как "abstract" - обязательны к реализации. Что дает уверенность в том, что любой наследник будет реализовывать эти методы.
3) Открыв файл с абстрактным классом, я сразу вижу методы которые у него есть, и которые мне необходимо реализовать. В вашем же примере я не знаю какие методы относятся конкретно к ChildClass, а какие к ClassName.
Все эти интерфейсы, абстрактные классы и т.д и т.п нужно тогда, когда над проектом работает несколько (много) человек, и проект чуть больше чем "свой мегакрутой бложик".
Инкапсуляция, полиморфизм и т.п.
Точные термины не помню.
Можно одинаково работать с разными объектами, если видеть в них только базовый класс.