Если я импортирую суперкласс, нужно ли мне импортировать и его подкласс? - PullRequest
1 голос
/ 22 января 2020

Я импортировал класс java.util.Calendar, и его метод getInstance() возвращает экземпляр самого объекта подкласса, который в моем случае имеет тип java.util.GregorianCalendar.

Однако почему мне нужно импортировать java.util.Calendar, чтобы это работало, если я также использую в этой программе java.util.GregorianCalendar, когда вызывается getInstance()?

import java.util.Calendar;

public class Test {
    public static void main(String[] args) {

       Calendar cal = Calendar.getInstance();
    }
}

Ответы [ 2 ]

3 голосов
/ 22 января 2020

В Java, import декларации предназначены исключительно для разрешения имен. Вам не нужно импортировать GregorianCalendar, потому что ваш код не использует имя GregorianCalendar для ссылки на что-либо. Из спецификации языка Java ( §7.5 ):

Объявление импорта позволяет именованному типу или члену stati c обращаться по простому имени ( §6.2), который состоит из одного идентификатора.

0 голосов
/ 22 января 2020

java.util.Calendar является абстрактным классом (https://docs.oracle.com/javase/7/docs/api/java/util/Calendar.html)

Любой класс, который расширяет (путем реализации абстрактных методов) класс Calendar, также является Calendar, вот почему вы можете использовать GregorianCalendar как Calendar.

Однако, если вы решили использовать указанный c метод из GregorianCalendar, скажем: setGregorianChange, вам нужно будет изменить код для импорта GregorianCalendar, а также для изменения ваша cal переменная будет иметь тип GregorianCalendar

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...