#java #class #inheritance #package
#java #класс #наследование #пакет
Вопрос:
Я пишу очень простое приложение, расширяющее JFrame Swing. В чем разница между созданием явной ссылки:
public class LineTest extends javax.swing.JFrame {
...
или импортировать класс заранее:
import javax.swing.JFrame;
public class LineTest extends JFrame {
...
Когда (и почему) вы бы использовали один метод вместо другого?
Ответ №1:
Реальной разницы нет; сгенерированный байт-код будет точно таким же. import
Оператор — это на самом деле просто способ сообщить компилятору: «когда я пишу JFrame
, я на самом деле имею в виду javax.swing.JFrame
«.
Возможно, вы захотите использовать полные имена пакетов, если у вас есть, например, два класса с одинаковыми именами в разных пакетах. Одним из распространенных примеров из стандартной библиотеки являются классы java.util.Date
и java.sql.Date
.
Ответ №2:
Разница заключается только в исходном коде. Использование полного имени приводит к менее читаемому коду, поэтому все используют импорт практически исключительно. Единственное место, где я когда-либо видел, чтобы полные имена использовались последовательно, — это сгенерированный код.
Единственная причина использовать полное имя в обычном коде — это когда вам приходится использовать два класса с одинаковым простым именем (например, java.util.List
и java.awt.List
) — в этом случае альтернативы нет.
Ответ №3:
Для компилятора это не имеет никакого значения. Недостатком использования полного имени является то, что вам пришлось бы записывать его каждый раз, когда вы используете класс. Я использую полное имя, только если у меня есть два класса с одинаковым именем в разных пакетах. Таким образом, вы можете различать эти два класса