Почему существует "extends Thread", когда "реализует Runnable" является победителем во всех случаях
Я знаю, что implements Runnable
предпочитается над extends Thread
в потоках Java, поскольку он позволяет нам расширить какой-либо другой класс, если это необходимо. Но если это так, то extends Thread
также имеет свои преимущества перед implements Runnable
, и если да, то каковы эти преимущества?
Ответы
Ответ 1
Потому что иногда (почти никогда, но иногда) вы хотите изменить основное поведение Thread
.
Это, когда вам нужно будет продлить его.
Вы можете изменить его, переопределив метод из класса Thread
, вы не можете сделать это, выполнив один из Runnable
.
Ответ 2
За последние 20+ лет, прошедших с момента выпуска Java 1.0, из-за того, что считается хорошим шаблоном дизайна, он изменился. Тем не менее, Java привержена обратной совместимости, что означает, что старый код, который может использовать плохие шаблоны проектирования, по-прежнему будет работать.
Один из моих любимых ненавистников - StringBuffer
, для которого никогда не было хорошей идеи сделать его синхронизированным методом, было заменено более десятка лет назад, но, к сожалению, разработчикам не мешают использовать его сегодня, и даже новые разработчики используют его, хотя он устарел задолго до того, как они начали использовать Java.