Превышен предел размера буфера HttpClient

На мой взгляд, реальный прецедент, который делает это настолько нечитаемым, выглядит примерно так. Что выводит код ниже?

//in a main method somewhere
Super instance = new Sub();
instance.method();

//...
public class Super {
    public static void method() {
        System.out.println("Super");
    }
}

public class Sub extends Super {
    public static void method() {
        System.out.println("Sub");
    }
}

Ответ заключается в том, что он печатает «Супер», потому что статические методы не являются виртуальными. Хотя instance есть-a Sub, компилятор может перейти только к типу переменной, которая является Super. Однако, вызывая метод через instance, а не Super, вы тонко подразумеваете, что он будет виртуальным.

На самом деле разработчику, читающему instance.method(), пришлось бы посмотреть на объявление метода (его подпись), чтобы узнать, какой метод он фактически вызывает. Вы упоминаете

, мне кажется, что это может сделать мою жизнь проще, поэтому мне не нужно беспокоиться о том, что статично или нет

Но в данном случае контекст действительно очень важен!

Я могу с уверенностью сказать, что разработчикам языка было ошибкой, чтобы это разрешить в первую очередь. Держитесь подальше.

16
задан Milanec 10 September 2013 в 14:16
поделиться