public class Solution {
    public static void main(String[] args) {
        SiamCat simka = new SiamCat("Simka");
        NakedCat nakedSimka = simka.shave();
    }

    public static class NakedCat { }

    public static class NormalCat extends NakedCat {
        public NormalCat() { }

        public NormalCat(String name) {
            System.out.println("My name is " + name);
        }

        public NakedCat shave() {
            return this;
        }
    }

    public static class SiamCat extends NormalCat {
        public SiamCat(String name) {
            super(name);
        }
    }
}
В классе NakedCat мы убрали явный конструктор потому, что там есть такой по умолчанию? В классе NormalCat конструктор public NormalCat() { super();} - использовал бы параметры родительского класса? А в варианте public NormalCat() {} - это конструктор по умолчанию, так зачем нам его явно прописывать???