Задачу я решил, но так и не понял, почему у меня автоматом выполняются методы toString() и getWeather()? Код свой немного затер, чтобы не говорили потом, что написал решение. Итак, в println() мы объявили новый экземпляр класса Today, ввели в его конструктор из интерфейса WeatherType одну из переменных, дабы инициализировать переменную type в классе. Окей, выполняю код и вижу, что println вывел что то типа "Today it will be Freezing". Код которых указан в двух методах, которые я написал выше в тексте. Почему они сработали? Ведь кроме конструктора я вообще ничего не вызывал. Что за магия, объясните пожалуйста)
public class Solution {
    public static void main(String[] args) {
        System.out.println(new Today(WeatherType.CLOUDY));
        System.out.println(new Today(WeatherType.FOGGY));
        System.out.println(new Today(WeatherType.FREEZING));
    }

    static class Today implements ......... {
        private String type;

        Today(String type) {
            this.type = type;
        }

        @Override
        public String toString() {
            return String.format("Today it will be %s", this.getWeatherType());
        }

        public String getWeatherType()
        ........
        }
    }