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

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
Зарегистрируйся сейчас
или Подпишись на будущие тесты