Что будет напечатано, в результате компиляции и выполнения следующего кода?

public class Test {
    public static void main(String[] args) {
        Sub sub = new Sub();
        System.out.println(sub.getWidth());
    }
}

class Sub extends Base {    
    private Dimension size;
    
    public Sub() {        
        this.size = new Dimension(50, 50);
    }
    
    public Dimension getSize() {
        return size;
    }
}

class Base {    
    private int width;
    private int height;
    private Dimension size = new Dimension(20, 20);
    
    Base() {        
        this.width = getSize().width;
        this.height = getSize().height;
    }
    
    Dimension getSize() {
        return size;
    }
    
    int getWidth() {
        return width;
    }
    
    int getHeight() {
        return height;
    }
}
Explanation
NullPointerException выбрасывается при попытке конструктора суперкласса (Base) обратиться к состоянию объекта, полученного из метода getSize(), который был переопределен в потомке. Класс Sub инициализирует переменную size только в своём конструкторе, т.ч. в момент вызова метод getSize() возвращает null.

Слідкуй за CodeGalaxy

Мобільний додаток Beta

Get it on Google Play
Зворотній Зв’язок
Продовжуйте вивчати
тести з Java
Cosmo
Зареєструйся Зараз
або Підпишись на майбутні тести